php - 拉维尔 : How to Auth for Multi-Domain

标签 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 个域的用户?

最佳答案

我们需要的是在 2 个不同域之间传输 session 的可能性。

为了实现这一点,您需要执行以下操作(这是选项之一):

  1. 创建一个名为 setcookie 的方法在 example-B.comexample-C.com ,它可以检索 token 并向用户写入 session cookie。
  2. login example-A.com 中的方法: 使用 curl登录 example-B.com . - 我假设您在所有 3 个站点上都有登录 Controller ,并且由于 curl 的使用是题外话,我不会在此处粘贴代码,我相信您可以处理它:)
  3. 登录成功后,从example-B.com获取 session cookie .
  4. 显示登录用户 <img>喜欢<img src="http://example-B.com/setcookie?token=xxxx" style="display: none;" />将 session cookie 写入管理员用户。
  5. 现在已登录的 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/

相关文章:

php - 在没有 session 的情况下存储上次运行时的值

php - PHP 中单引号和双引号字符串有什么区别?

asp.net-mvc - 具有应用内授权的 OWIN WsFederation 身份验证

c# - 属性中的依赖注入(inject)

php - Laravel 5 中如何获取一篇文章的 user_id ?

jquery - 搜索后表单和选择不起作用

php - 如何最大限度地减少需要以不同间隔分组的查询的负载?

python - 通过 Lyft Api 脚本自动执行三因素身份验证

php - laravel preg_replace() : Parameter mismatch, 模式是一个字符串,而替换是一个数组

php - 将 2 个 Mysql 查询合并为一个