Laravel - 如何在不同域之间使用 Auth::check 或 Auth::user?

Posted

技术标签:

【中文标题】Laravel - 如何在不同域之间使用 Auth::check 或 Auth::user?【英文标题】:Laravel - How to use Auth::check or Auth::user between different domains? 【发布时间】:2020-11-05 00:42:47 【问题描述】:

我有一个关于 laravel 框架(版本 5.2)和身份验证的问题。 我有 2 个代表软件的域。我们称他们为https://azure.mydomain.comhttps://azuresoftware.mydomain.com

laravel 应用程序托管在域 https://azuresoftware.mydomain.com 上。 https://azure.mydomain.com 只是一个 cms 框架,它提供有关网站的一些信息。

现在我想显示不同的菜单,如果用户在https://azure.mydomain.com 上登录或未登录。 我想,我可以向https://azuresoftware.mydomain.com/ 发出fetch 请求并使用laravel 方法Auth::check() 检查用户是否已经登录。我知道这是一个cors 获取请求,但这不是问题。我已经允许来自https://azure.mydomain.comIIS 网络服务器请求。该请求工作正常,也只是一个简单的请求。 但实际上Auth::check() 总是返回false,即使我在软件端登录也是如此。

这是我目前的代码:

<script>
    fetch('https://azuresoftware.mydomain.com/checkLogin', 
        method: 'GET', 
        headers:  
            'Content-Type': 'text/plain'
        
    )
    .then(function(res)  
        return res.json()
    )
    .then(function(data)  
        if(data.isLoggedIn) 
            // do some stuff...
        
        else 
        
            // do some other stuff...   
        
    );
</script>

routes.php:

Route::group(['middleware' => 'web'], function () 
...
    Route::get('checkLogin', function() 
        return json_encode(['isLoggedIn'=>\Auth::check()]);
    );
...

我确定,我忘记了一些重要的东西,为什么它不能以这种方式工作,所以我很高兴有任何提示。非常感谢!

【问题讨论】:

【参考方案1】:

这是因为 AJAX 调用仅在您调用的 url 与调用脚本位于同一域时才会发送 cookie。

更多信息请参见Cross domain POST request is not sending cookie Ajax Jquery。

【讨论】:

以上是关于Laravel - 如何在不同域之间使用 Auth::check 或 Auth::user?的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存 auth()->user() 与 Laravel 缓存中的角色关系,以减少对数据库的调用?

突然之间,我在 Laravel 8 的 Auth 中间件中的 /admin 路由返回了 404 not found

如何使用 Laravel 在响应正文中发送 auth cookie?

Laravel 加入 Auth 表

[PHP] 浅谈 Laravel auth:api 不同驱动 token 和 passport 的区别

Laravel 5.6 对数据库中不同表的身份验证