我有三个网站的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个域的用户?
所需要的是在两个不同域之间转移会话的可能性。
为了实现这一点,您需要执行以下操作(这是其中一个选项):
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;" />
。编辑:对不起,我不经常使用laravel :(我使用一个名为ThinkPHP的框架,它在中国的时尚,语法类似于laravel,希望我能帮到你
出于安全原因,您无法为其他域设置cookie,但您可以访问其他域并为该用户设置cookie。
第1步代码:
添加一个新控制器并在其中编写一个函数:
curl
因此,example-B.com
登录用户并获得会话ID,然后仪表板页面向用户显示隐藏的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
}
}
,以便为用户设置会话ID为curl
的会话cookie,然后用户可以作为登录用户访问其他站点。