【问题标题】:Auth::user() doesn't travel across subdomains? - Laravel 5.2Auth::user() 不会跨子域传输? - 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 中是否有任何方法可以让我在所有子域中进行身份验证?不仅仅是那些拥有需要我进行身份验证的控制器操作的人?

【问题讨论】:

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


    【解决方案1】:

    config/session.php 你应该改变:

    'domain' => null,
    

    进入

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

    你也应该清除所有的cookies

    【讨论】:

    【解决方案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】:

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-08-11
        • 2017-03-17
        • 2016-04-02
        • 2016-05-13
        • 1970-01-01
        • 1970-01-01
        • 2018-05-06
        • 1970-01-01
        • 2016-09-11
        相关资源
        最近更新 更多