AngularJS和Laravel -跨域CORS / XHR请求缺少(记住)cookie



当我不使用——disable-web-security选项时,我的CORS/XHR请求在请求头中缺乏memorber_xyz cookie。如果我启用该选项,memorber_xyz cookie将包含在请求头中,一切都工作正常。

作为解决方案,我目前通过基本的验证头发送认证凭据。但我认为这不是我想要的,也不是正确的方式。

我怎么能得到记住cookie包含在请求头?


编辑:
在chrome的网络控制台,我可以看到以下内容:

(不带——disable-web-security选项)

记忆cookie由laravel在第一个响应头中发送。但是不会被angular包含在下一个请求的头文件中。为什么?

每个请求在实际请求触发之前都有OPTIONS预飞行请求。飞行前请求是否可能以某种方式删除/破坏cookie ?

(在chrome中使用——disable-web-security选项)

记忆cookie由laravel在第一个响应头中发送,并将在angular的下一个请求头中发送。一切都很好。


编辑2:
我是否应该将响应头中的cookie包含到请求头中?当是的,为什么我不需要这样做与"——禁用web-security"选项在chrome中启用?


我做错了什么?

谢谢!

我不确定我是否在直接回答你的问题,但我会尝试一下。您确实需要为CORS在客户端和服务器端设置特定的标头。

客户端需要知道发送Cookie头,否则它将删除它们。对于jQuery,这意味着在ajax调用中设置withCredentials参数。在这里查看更多信息。这听起来像是你正在努力解决的问题。

在服务器端,您可能需要确保设置了飞行前请求。

例如,当我在Laravel 4中使用CORS时,我有一个过滤器来为每个响应添加一些标题:

App::after(function($request, $response)
{
    // Note that you cannot use wildcard domains when doing CORS with Authorization!
    $response->headers->set('Access-Control-Allow-Origin', 'http://dev.domain.local');
    $response->headers->set('Access-Control-Allow-Credentials', 'true');
    $response->headers->set('Access-Control-Allow-Headers', 'Authorization, X-Requested-With');
});

在控制器中,我也有一个OPTIONS请求响应飞行前请求。一个例子是:

public function optionsComplex()
{
    $response = Response::make(null, 200);
    $response->headers->set('Allow', 'GET, PUT, DELETE');
    $response->headers->set('Access-Control-Allow-Methods', 'GET, PUT, DELETE');
    return $response;
}

希望对你有帮助。

相关内容

  • 没有找到相关文章

最新更新