首页 文章

Laravel CORS子域会话

提问于
浏览
5

我通过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 的路线中的 Headers

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时,每次生成一个新文件时......

1 回答

  • 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)检查请求和响应的 Headers . 它们应该有一个cookie属性(它包含“laravel”,“token”等),第二次应该等于第一个响应头 .

相关问题