Laravel登录后立即注销用户

时间:2019-10-11 09:02:51

标签: php authentication laravel-5

我的代码

在Laravel 5.8中,我有以下路线。

仅有的公共可访问路线,必须为/login

//web.php

Route::get('/login', function() {
    return view('auth.login', ['loginRequested' => false]);
})->name('login');
Route::post('/login', 'Auth\LoginController@login')->name('process-login');
Route::get('/login/{loginKey}/{loginHash}', 'Auth\LoginController@authenticate');

Route::group(['middleware' => ['auth']], function() {
    Route::get('/', function () {
        return view('welcome');
    });
    Route::get('/logout', 'Auth\LoginController@logout');
});

然后我有以下验证码:

// LoginController.php
/**
 * @param string $loginKey
 * @param string $loginHash
 * @param UsersRepository $usersRepository
 * @param ThirdPartyConnect $thirdParty
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
 */
public function authenticate(string $loginKey, string $loginHash, UsersRepository $usersRepository, ThirdPartyConnect $thirdParty)
{
    try {
        $user = $usersRepository->findUserByHash($loginKey);
        if (md5($user->user_email) !== $loginHash) {
            throw new \Exception('Invalid login hash', 403);
        }

        Auth::login($user);
        $user->details = $thirdParty->getUserDetails($user->user_email);
        Auth::setUser($user);
        return \redirect($this->redirectTo);
    } catch (\Exception $e) {
        return \redirect('login');
    }
}

我期待什么

登录后,它应该重定向到我的$this->redirectTo,在这里我应该可以通过Auth::user()访问用户对象。

它做什么

我登录时,它会重定向到/login。如果我在$user->details调用之后转储用户,它将拥有我想要的有关该用户的所有信息。它不会引发异常(我在dd($e)的catch部分中添加了authenticate

它似乎也没有正确设置会话时间。如果我使用Chrome浏览器检查Cookie,则到期日期是当前日期/时间,而不是当前日期/时间+根据配置文件的30分钟。

问题

该如何解决?有什么我想念的东西吗?为什么它会重定向到/login而不是重定向到$this->redirectTo

1 个答案:

答案 0 :(得分:0)

因此发现了问题。

我的用户表的主键是var job = launch { jobFunction() } fun jobFunction() { while (isActive){ delay(5000) doStuff() } } if(job.isActive.not()) { job = launch( jobFunction() ) }

我的模型没有设置此主键。因此,我假设它不知道谁登录并破坏了会话。

我将其添加到我的user_id模型中:

User