【问题标题】:Auth::user() returns null across domain, in a laravel applicationAuth::user() 在 laravel 应用程序中跨域返回 null
【发布时间】:2018-05-06 04:36:28
【问题描述】:

我在服务器 a.com 上托管了一个 laravel 应用程序,该应用程序处理在其他服务器上设置的其他 laravel 应用程序的所有身份验证,服务器 1 - app.com - 对系统和存储进行身份验证/用户管理它在一个 cookie 中被发送到服务器 2,3 和 4,

server 2. mail.app.com  
server 3. fms.app.com  
server 4. dod.app.com 

在服务器 2,3 和 4 上有一个初始化函数,它试图解码从服务器 1 跨域发送的 cookie。看起来像这样。

    public function initialize(){
      $mail = json_decode($logged_in_user_cookie)->email;
      $user = User::where('email', $mail)->first();    
      if(!$user){
        $user = new User;
        $user->email = $mail;
        $user->save();
      }
      Auth::login($user);

      if(Auth::check()){
      //dd($user); - works fine..
      return redirect()->route('dashboard');

      }else{
        echo 'user not logged in ';
      }

    }

服务器 2、3 和 4 也有 users 表,但没有密码,所以如果 cookie 命中这些服务器中的任何一个,系统会读取 cookie 并从 cookie 中提取用户对象并检查是否存在任何用户,创建用户然后使用 [Auth::login($user)] 将用户登录到当前系统,如果用户已经存在..它会自动登录用户..

现在我们遇到的问题是,在这条线上 返回重定向()->路由('仪表板');它会将您重定向到应用程序的仪表板页面,并且 dd(Auth::user()) - 它返回 null,

我们无法弄清楚它为什么会这样工作。由于 Auth::user() 应该在整个应用程序中都可用,就像 google 的工作方式一样,

google.com, - 一个登录控制每个应用程序,包括 youtube drive.google.com、mail.google.com、play.google.com、news.google.com、plus.google.com、youtube.com - 这就是我们正在尝试做的事情。

【问题讨论】:

    标签: laravel authentication cookies laravel-5.2


    【解决方案1】:

    转到您的 config/session.php 并将这个 'cookie' => 'laravel_session' 重命名为您的会话名称。例如'cookie'=>'foo_session'。这应该可以。

    【讨论】:

      猜你喜欢
      • 2019-09-20
      • 2016-05-13
      • 2020-08-14
      • 1970-01-01
      • 2023-02-04
      • 2017-03-17
      • 2021-01-02
      • 2017-06-29
      • 2016-05-11
      相关资源
      最近更新 更多