我有三个网站的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个域的用户?
答案 0 :(得分:1)
所需要的是在两个不同域之间转移会话的可能性。
为了实现这一目标,您需要执行以下操作(这是其中一个选项):
setcookie
和example-B.com
上创建名为example-C.com
的方法,该方法可以检索令牌并为用户写入会话cookie。login
中的example-A.com
方法中:使用curl
登录example-B.com
。 - 我假设你们所有3个站点都有登录控制器,由于curl的使用不在主题,我不打算在这里粘贴代码,我相信你能解决这个问题:)example-B.com
获取会话Cookie。<img>
,如<img src="http://example-B.com/setcookie?token=xxxx" style="display: none;" />
,将会话Cookie写入管理员用户。curl
转移到用户,他现在可以作为登录用户访问example-B.com
。编辑:抱歉,我不经常使用laravel :(我使用的是一个名为ThinkPHP的框架,它在中国的时尚,语法类似于laravel,希望我能帮到你
出于安全原因,您无法为其他域设置Cookie,但您可以访问其他域并为该用户设置Cookie。
第1步代码:
添加一个新控制器并在其中编写一个函数:
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
登录了用户并获得了会话ID,然后仪表板页面向用户显示隐藏的<img src="setcookie?token=xxx">
,以便为用户设置会话ID为curl
的会话cookie ,然后用户可以作为登录用户访问其他站点。