首页 > 解决方案 > Laravel 应用程序在重定向时注销经过身份验证的用户(不应该)

问题描述

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

这是功能:

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。

标签: phplaravelauthenticationlaravel-5

解决方案


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

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

用这个 :

return redirect($redirect);

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


推荐阅读