我有一个用于三个网站的 Laravel 应用程序,它们列在我的 .env
文件中
A_DOMAIN=example-A.com
B_DOMAIN=example-B.com
C_DOMAIN=example-C.com
我的管理区域位于 example-A.com/admin
。我现在希望管理员可以使用用户登录到其他域之一。
这是我到目前为止尝试过的:
public function login(User $user, $orga)
{
\Auth::->login($user);
return redirect(env($orga . '_DOMAIN'));
}
问题是,由于管理区域位于 example-A.com/admin
调用 \Auth::->login($user);
将登录example-A.com
的用户。这意味着 login($user, 'B')
会在 example-A.com
上登录用户,然后重定向到 example-B.com
用户未登录的地方。
我的问题:如何让用户登录我应用程序的任何其他域?或者是否可以同时登录所有 3 个域的用户?
最佳答案
我们需要的是在 2 个不同域之间传输 session 的可能性。
为了实现这一点,您需要执行以下操作(这是选项之一):
- 创建一个名为
setcookie
的方法在example-B.com
和example-C.com
,它可以检索 token 并向用户写入 session cookie。 - 在
login
example-A.com
中的方法: 使用curl
登录example-B.com
. - 我假设您在所有 3 个站点上都有登录 Controller ,并且由于 curl 的使用是题外话,我不会在此处粘贴代码,我相信您可以处理它:) - 登录成功后,从
example-B.com
获取 session cookie . - 显示登录用户
<img>
喜欢<img src="http://example-B.com/setcookie?token=xxxx" style="display: none;" />
将 session cookie 写入管理员用户。 - 现在已登录的 session 已从
curl
转移对于用户,他现在可以访问example-B.com
作为登录用户。
编辑:对不起,我不经常使用laravel :( 我使用的框架叫ThinkPHP,它在中国很流行,语法类似于laravel,希望我能帮助你
出于安全原因,您不能为其他域设置 cookie,但您可以访问其他域并为用户设置 cookie。
第一步代码:
添加一个新的 Controller 并在里面写一个函数:
public function setcookie($token = '') {
// the $token here is the $_GET['token'] parameter filtered by the framework
if(!empty($token) && strlen($token) > 0) { // check if the param is not empty...
setcookie("PHPSESSID", $token, 0, '/', '', false, true); // this will set a cookie for anyone who visited this action
}
}
所以 curl
登录用户并获得 session ID,然后仪表板页面向用户显示隐藏的 <img src="setcookie?token=xxx">
为用户设置 session cookie, session ID curl
得到,然后用户可以作为登录用户访问其他站点。
关于php - 拉维尔 : How to Auth for Multi-Domain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49083883/