Мой код
У меня есть следующие маршруты в 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
.
Кажется, он также неправильно устанавливает время сеанса. Если я проверяю cookie в chrome,дата истечения срока действия - это текущая дата / время, а не текущая дата / время + 30 минут в соответствии с файлом конфигурации.
Вопрос
Как это исправить? что-то настроено неправильно? Почему он перенаправляет обратно на /login
, а не $this->redirectTo
, как ожидалось?