在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
?
答案 0 :(得分:0)
因此发现了问题。
我的用户表的主键是var job = launch { jobFunction() }
fun jobFunction() {
while (isActive){
delay(5000)
doStuff()
}
}
if(job.isActive.not()) {
job = launch( jobFunction() )
}
。
我的模型没有设置此主键。因此,我假设它不知道谁登录并破坏了会话。
我将其添加到我的user_id
模型中:
User