Auth::user() 不跨子域? - Laravel 5.2

Auth::user() doesn't travel across subdomains? - Laravel 5.2

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

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

博客只有 url 的人才能访问,也就是说,它不是 public 或常识。我有一堆与此域相关的路由需要您登录。

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

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

larval 中有什么方法可以让我在所有子域中进行身份验证吗?不仅仅是那些需要我进行身份验证的控制器操作?

config/session.php 中,您应该更改:

'domain' => null,

进入

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

您还应该清除所有 cookies

config/session.php 中,您应该更改:

'domain' => null,

进入

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

和主域

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

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

之后,我可以使用 Auth

只想补充答案

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

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

对于任何遇到同样错误的人,我都按照上面的步骤进行操作,直到我做了这些:

  1. 选择数据库或 redis 作为会话驱动程序。我选择了 redis,并将其输入到我的环境中,甚至输入到 config.session.driver 的默认值中,以达到很好的衡量标准。

  2. 我按照上面所有人的建议将域名更改为“.domain.com”。

  3. 然而,奇怪的是,完成所有这些后,没有任何变化,直到我更改了会话 cookie 名称。 默认情况下它有:'APP_NAME', 'Laravel'), '_').'_session' 我只将 'Laravel' 部分更改为我的域...

  4. 最后,用常规方式清除cookie也没有用。 至少对我来说使用 firefox。 我不得不打开开发工具并删除 Storage > Cookies 下的所有站点条目 就像魔术一样,繁荣! 有效! 尝试一下。