Tôi có một trang web có API REST riêng biệt trên tên miền phụ, ví dụ: api.mysite.com, tôi gửi yêu cầu CRUD đến. API sub-domain có bộ lọc này thêm các tiêu đề phù hợp với phản ứng:Auth :: user() trả về null với các yêu cầu CORS
// Simple CORS handling
Route::filter('cors', function($route, $request, $response) {
$origin = Request::header('Origin');
$host = parse_url($origin, PHP_URL_HOST);
// Don't send response for external domains.
if (!in_array($host, Config::get('domains'))) {
App::abort();
}
$response->headers->set('Access-Control-Allow-Origin', $origin);
$response->headers->set('Access-Control-Allow-Headers', 'Accept, Accept-Encoding, Accept-Language, Content-Length, Content-Type');
$response->headers->set('Access-Control-Allow-Methods', 'DELETE, GET, PATCH, POST, PUT');
$response->headers->set('Access-Control-Allow-Credentials', 'true');
});
Tôi cũng đang thiết crossdomain: true
và xhrFields: { withCredentials: true }
theo yêu cầu jQuery $.ajax
tôi. Các yêu cầu quản lý để đi qua máy chủ, nhấn các tuyến đường thích hợp, vv, nhưng một cái gì đó đang đi sai với quá trình xác thực. Mỗi lần, Laravel hoạt động như thể người dùng chưa đăng nhập, yêu cầu Auth::user()
trả về null. Kiểm tra các yêu cầu trong Firebug cho thấy rằng tiêu đề Cookie
được gửi trong yêu cầu với id phiên Laravel, nhưng máy chủ phản hồi với SetCookie
, như thể đang cố bắt đầu một phiên mới. Tôi có thể làm điều gì đó ngu ngốc ở đây, nhưng tôi đang ở cuối trí thông minh của tôi cố gắng để xác định chỉ những gì.
Cập nhật: Từ một số lần gỡ lỗi, tôi đã tìm thấy điều gì đó thú vị. Không chắc nó có nghĩa là gì. Để truy cập trang được đề cập, người dùng phải đăng nhập. Do đó, có một cookie laravel_session trong trình duyệt khi trang tải. Sau đó tôi gửi một vài yêu cầu AJAX (tên miền chéo) bằng cách tương tác với trang. Yêu cầu đầu tiên không có tập hợp cookie nào cả và nhận được một tập hợp cookie laravel_session mới từ máy chủ. Yêu cầu thứ hai sau đó bao gồm cookie đó, nhưng phản hồi cho nó sẽ gửi lại một cookie mới khác, như thể back-end chưa bao giờ có bản ghi nhớ về lần đầu tiên. Tôi đang bắt đầu tự hỏi nếu điều này không phải là một cái gì đó để làm với các lĩnh vực cookie hoặc một số như vậy.
Tôi đang gặp sự cố với vấn đề này. Tôi đang tương tác với máy chủ laravel của tôi tại localhost: 8000 từ localhost: 9000. Cookie laravel_session có lưu trữ một người dùng được xác thực không? –
Nó chỉ là một băm được sử dụng để tra cứu phiên của bạn. Nếu tôi nhớ chính xác, người dùng được xác thực sẽ được lưu trữ trong phiên làm ID. Hồ sơ người dùng thực tế sau đó được lấy từ cơ sở dữ liệu nếu bạn cố gắng sử dụng Auth :: user(); –