【问题标题】:Laravel app logging out authenticated user when redirecting (it shouldn't)Laravel 应用程序在重定向时注销经过身份验证的用户(不应该)
【发布时间】:2020-08-16 01:55:03
【问题描述】:

我创建了一种方法,可以通过来自单独网站的链接将用户登录到我们的网站。我们使用令牌和用户名来查找用户,然后使用内置的登录方法对他们进行身份验证(我可以确认这一切都按预期工作)。

函数如下:

public function login($username, $token, $redirect)
{
    $accountLogin = AccountLogin::Where('username', $username)
        ->Where('token', $token)
        ->first();

    if ($accountLogin) {
        try {
            Auth::login($accountLogin);
            print_r(Auth::check()) // prints 1.
            header('Location: ' . $redirect);
            exit;
        } catch (\Exception $e) {
            return $e->getMessage();
        }
    }

    echo(array(
       'status' => 'error',
       'message' => 'Error logging in'
    ));
}

我的问题是用户在重定向后似乎已注销。

在上面的函数中,我可以看到该帐户已找到,并且 Auth::check() 返回 1,或者如果我回显 Auth::User(),那么我确实得到了用户信息。

然后我们尝试进行重定向,该重定向应将我们带到作为参数传入的路由(您确实需要对所有这些路由进行身份验证),但我被重定向到主页并注销。如果我从该页面登录,那么它会将我带到我最初想要访问的 url(所以它就像记住我想去的地方,但就是不承认我已经登录了)。

两个站点目前都通过 apache 在本地运行。

TIA。

【问题讨论】:

    标签: php laravel authentication laravel-5


    【解决方案1】:

    您是否在您的 AccountLogin 模型中扩展了 Authenticatable

    您可以尝试使用带有用户 ID 的 loginUsingId($id, $remember = false) 函数。

    【讨论】:

      【解决方案2】:

      而不是以这种方式重定向:

      header('Location: ' . $redirect);
      exit; 
      

      使用这个:

      return redirect($redirect);
      

      Laravel 有它自己的重定向辅助方法,你最好使用它。还以您的方式重定向并在其结束时退出,破坏了存储在 session 中的用户 ID,因此假设该用户未登录。

      【讨论】:

        猜你喜欢
        • 2019-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 2020-02-22
        • 2010-10-25
        • 2019-11-13
        • 2014-07-15
        相关资源
        最近更新 更多