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的主要内容,如果未能解决你的问题,请参考以下文章