Auth :: user()不会穿过子域? - Laravel 5.2

时间:2015-12-28 06:09:15

标签: laravel session laravel-5 subdomain laravel-5.2

我的网站中有一个子域名,例如:

http://example.ca
http://blog.example.ca

博客只有拥有网址的人才能访问,也就是说,它不是公共知识或常识。我有一堆与此域名相关的路线,要求您登录。<​​/ p>

我在nav.blade.php中声明,如果用户已登录,则应该有一个下拉列表,如果没有,则不应该有下拉列表。

这一切都适用于http://blog.example.ca,但当我转到http://example.ca时,我不再进行身份验证了。

是否有任何方法可以让我在所有子域中进行身份验证?不只是那些需要我进行身份验证的控制器操作的人吗?

4 个答案:

答案 0 :(得分:15)

config/session.php中你应该改变:

'domain' => null,

'domain' => '.example.ca',

您还应该清除所有Cookie

答案 1 :(得分:-1)

config/session.php中你应该改变:

'domain' => null,

'domain' => '.example.ca',

和主域

'files' => storage_path('framework/sessions'), 

对于子域名,我指向主域??/framework/sessions'的路径。

之后,我可以使用Auth

答案 2 :(得分:-1)

只想添加答案

除了在config / session中将域设置为“.domain.com”之外,还要确保主域和子域都访问相同的用户表和相同的会话表

laravel将用户ID存储在会话中,因此如果您有不同的表,则该子域中将找不到该ID,因此未登录且无法访问Auth ::

答案 3 :(得分:-1)

对于遇到相同错误的任何人,我都会遵循上述所有内容,直到执行以下操作:

  1. 选择数据库或redis作为会话驱动程序。我选择了redis并将其输入到我的环境中,甚至输入到默认的config.session.driver中,以取得良好的效果。

  2. 如上所述,我已将域名更改为“ .domain.com”。

  3. 但是,完成所有这些操作之后,奇怪的是,在我更改了会话cookie名称之前,没有任何变化。 默认情况下,它具有:“ APP_NAME”,“ Laravel”),“ _”)。 我只将“ Laravel”部分更改为我的域...

  4. 最后,从常规方式清除cookie无效。 至少对我来说,使用Firefox。 我必须打开开发工具并删除“存储”>“ Cookies”下的所有站点条目 就像魔术,繁荣! 有效! 尝试一下。