我通过ajax请求在子域中遇到Auth :: check()问题。 场景: 2个子域名
www.testing.dev
api.testing.dev
这两者之间的单一登录/会话..
在laravel config / session.php中,我设置了'domain' => ".testing.dev"
,一切正常,我可以在一个页面登录并继续登录其他页面!
但是当我使用ajax时出现问题..
场景:在api.testing.dev
中,我用firebug,js执行任何操作
$.ajax({
url: 'http://api.testing.dev/who',
type: 'GET',
cache: false
});
api.stesting.dev/who
返回:
public function getWho(){
return var_dump( Auth::user() );
}
回复是我帐户的信息!一切都正确..
如果从www.testing.dev
我执行相同的ajax查询,我得到Auth :: check()返回null。虽然我得到了正常的响应,但跨域设置没有问题..这里是api.testing.dev
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: OPTIONS, POST, GET, PUT, DELETE');
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Credentials: true');
该网站在带有wamp的localhost中运行。
编辑:使用默认会话驱动程序'driver' => 'file'
,在初始登录后,app/storage/sessions
中有一个文件。如果我从一个子域转到另一个子域,则不会生成其他文件。
虽然每次生成新文件时我都会预先形成CORS ajax ......
答案 0 :(得分:0)
看到你的配置,也许你遇到了同样的问题。我没有使用Auth,而是会话并且每次都获得null
。我通过改变这个来解决它:
header('Access-Control-Allow-Origin: *');
...
header('Access-Control-Allow-Credentials: true');
到此:
header('Access-Control-Allow-Origin: http://localhost:9000');
...
header('Access-Control-Allow-Credentials: true');
我发现的原因是,当您使用凭据时,它需要为安全目的指定源,而对于AJAX请求,它也需要指定凭据。我使用Angular,我用$httpProvider.defaults.withCredentials=true;
做了这个,但我真的不知道jQuery的相应指令,但我希望你能找到它。
使用您最喜欢的调试器(对我来说是Firebug)检查请求和响应的标题。它们应该有一个cookie属性(它包含“laravel”,“token”等),第二次应该等于第一个响应头。