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.com
和https://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.com
的IIS
网络服务器请求。该请求工作正常,也只是一个简单的请求。
但实际上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?