Laravel:如何为多域验证

时间:2018-03-03 12:02:34

标签: php authentication laravel-5

我有三个网站的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个域的用户?

1 个答案:

答案 0 :(得分:1)

所需要的是在两个不同域之间转移会话的可能性。

为了实现这一目标,您需要执行以下操作(这是其中一个选项):

  1. setcookieexample-B.com上创建名为example-C.com的方法,该方法可以检索令牌并为用户写入会话cookie。
  2. login中的example-A.com方法中:使用curl登录example-B.com。 - 我假设你们所有3个站点都有登录控制器,由于curl的使用不在主题,我不打算在这里粘贴代码,我相信你能解决这个问题:)
  3. 成功登录后,从example-B.com获取会话Cookie。
  4. 向登录用户显示<img>,如<img src="http://example-B.com/setcookie?token=xxxx" style="display: none;" />,将会话Cookie写入管理员用户。
  5. 现在已登录的会话已从curl转移到用户,他现在可以作为登录用户访问example-B.com
  6. 编辑:抱歉,我不经常使用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 ,然后用户可以作为登录用户访问其他站点。