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

Posted

技术标签:

【中文标题】Auth::user() 不会跨子域传输? - Laravel 5.2【英文标题】:Auth::user() doesn't travel across subdomains? - Laravel 5.2 【发布时间】:2016-04-02 00:07:21 【问题描述】:

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

config/session.php 你应该改变:

'domain' => null,

进入

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

你也应该清除所有的cookies

【讨论】:

这对我不起作用..你能帮帮我吗? ***.com/questions/39714443/…【参考方案2】:

config/session.php 你应该改变:

'domain' => null,

进入

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

对于主域

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

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

之后,我可以使用 Auth

【讨论】:

【参考方案3】:

只是想补充一下答案

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

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

【讨论】:

嗨@arfian-agus,这似乎更像是一个评论而不是一个答案【参考方案4】:

对于遇到相同错误的任何人,我都按照上述所有步骤操作,直到完成以下操作:

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

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

    然而,奇怪的是,在我更改会话 cookie 名称之前,没有任何变化。 默认情况下它有:'APP_NAME'、'Laravel')、'_')。'_session' 我只是将“Laravel”部分更改为我的域...

    最后,以传统方式清除 cookie 不起作用。 至少对我来说使用 Firefox。 我不得不打开开发工具并删除 Storage > Cookies 下的所有站点条目 就像魔术一样,砰! 有效! 试试吧。

【讨论】:

以上是关于Auth::user() 不会跨子域传输? - Laravel 5.2的主要内容,如果未能解决你的问题,请参考以下文章

Auth::user() 使用 CORS 请求返回 null

Auth::user 不会在重定向时保留

跨子域访问会话(Rails 4)

跨子域使用 localStorage

Express 中跨子域的会话

PHP session 跨子域问题