Я пытаюсь реализовать единый вход в несколько доменов. Концепция довольно проста: отправить уникальные токены пользователя, а затем проверить эти токены, чтобы найти пользователя, а затем войти в систему.
Теперь, после проверки токена и захвата пользователя, я делаю что-то вроде этого
$loggedInUser = Auth::loginUsingId($user->id, true);
Теперь у меня есть настраиваемое промежуточное ПО, где оно сначала проверяет зарегистрированного пользователя, т.е.
Auth::Check()
Вышеупомянутое отлично работает впервые. Но при обновлении Auth :: check () не проверяется. Я также пробовал использовать все разные драйверы сеанса, но все еще не работает.
Я использовал аналогичный код в laravel 5.2, и он сработал. Но в laravel 5.3 он не проверяет постоянные запросы.
Изменить: позвольте мне показать вам мой код. Я не изменял AuthServiceProvider или какой-либо другой охранник. У меня есть модель пользователя внутри каталога, но я изменил путь в auth.php.
Вот маршрут, на который указывает domain1:
http://domain2.com/ {{$ role}} / {{$ route}} / singlesignon / {{$ token}}
Затем это подбирается методом verifySingleSignOn внутри loginController, который принимает роль, маршрут, по которому пользователь пришел из другого домена, и токен. Затем пользователь перенаправляется на те же маршруты, но на домен 2. Здесь я могу успешно получить идентификатор пользователя перед входом в систему вручную.
public function verifySingleSignOn($role, $route, $token)
{
// Fetch Single Signon
$userRepository = new UserRepository();
$user = $userRepository->checkForSingleSignOnToken($token, ['id']);
// Check if Token Exists
if (isset($user->id) && is_int($user->id) && $user->id != 0) {
// Manually Logging a user (Here is successfully recieve the user id)
$loggedInUser = Auth::loginUsingId($user->id);
if (!$loggedInUser) {
// If User not logged in, then Throw exception
throw new Exception('Single SignOn: User Cannot be Signed In');
}
$redirectTo = $role . '/' . $route;
return redirect($redirectTo);
} else {
return Auth::logout();
}
}
Тогда у меня есть это промежуточное ПО GlobalAdminAuth
// Check if logged in
if( Auth::Check() ){
$user = Auth::User();
// Check if user is active and is a globaladmin
if( !$user->isGlobalAdmin() || !$user->isActive() ){
return redirect()->guest('login');
}
}else{
return redirect()->guest('login');
}
return $next($request);
Теперь в первый раз все работает нормально, и пользователь успешно проходит через промежуточное ПО. но во второй раз срабатывает инструкция else.
Изменить: код для checkForSingleSignOnToken
public function checkForSingleSignOnToken($token, $columns = array('*'))
{
return User::where('single_signon', $token)->first($columns);
}
checkForSingleSignOnToken
- person Diogo Gomes   schedule 13.09.2016