我在通过 ajax 请求的子域中遇到 Auth::check() 问题。 设想: 2 个子域
www.testing.dev
api.testing.dev
这两者之间的单一登录/ session ..
在 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() );
}
response是我的账号信息!都正确..
如果从 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 的本地主机中运行。
编辑:使用默认 session 驱动程序'driver' => 'file'
,在初始登录后,在app/storage/sessions
中有一个文件。如果我从一个子域转到另一个子域,则不会生成其他文件。
虽然当我执行 CORS ajax 时,每次都会生成一个新文件...
最佳答案
看到你的配置,也许你遇到了和我一样的问题。我没有使用 Auth,但每次都使用 session 并得到 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)检查请求和响应的 header 。他们应该有一个 cookie 属性(它包含带有“laravel”、“token”等的东西)第二次应该等于第一次响应头。
关于php - Laravel CORS 子域 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24231191/