У нас есть два типа пользователей, «пользователи», которые используют стандартные леса авторизации Laravel; и «участники», которые входят в систему на отдельном сайте, который устанавливает cookie-файл, с которого мы считываем идентификатор их участника, и регистрируем их с помощью отдельного поставщика аутентификации.
Проблема, которую я не смог воспроизвести, заключается в том, что мы получаем исключение, которое, по-видимому, вызвано использованием неверного поставщика пользователя. Метод ExUserProvider retrieveByCredentials получает имя пользователя и пароль, которые он не ожидает, и не уникальный идентификатор, который ему нужен. Сейчас я просто записываю, что нужной информации не хватает. Я могу просто вернуться оттуда, но я не знаю, вызовет ли это другие проблемы. (Особенно учитывая, что я не могу повторить это.)
Что-то явно не так в настройке ниже? Есть ли у вас какие-либо идеи о том, как попытаться повторить эту проблему?
Поставщик услуг аутентификации:
public function boot() {
$this->registerPolicies();
\Auth::provider('exdriver', function($app, array $config) {
return new ExUserProvider();
});
}
конфиг / auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'sso' => [
'driver' => 'session',
'provider' => 'ex',
],
],
...
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'exusers' => [
'driver' => 'exdriver',
'model' => App\ExUser::class,
],
],
ExUserProvider
public function retrieveByCredentials(array $parameters) {
if(!isset($parameters['uniqueid'])) {
\Log::info('No uniqueid set when retrieveByCredentials in ExUserProvider');
\Log::info($parameters);
// return;
}
$exUser = new ExUser($parameters['uniqueid'], $parameters);
//store the user
session(['exuser' => $exUser]);
return $exUser;
}
/**
* Validate credentials.
*
* @param Authenticatable $user
* @param array $credentials username and password
* @return bool
*/
public function validateCredentials(Authenticatable $user, array $credentials) {
return TRUE;
}
/**
* Retrieve stored user.
*
* @param type $identifier
* @return string
*/
public function retrieveById($identifier) {
return session('exuser', null);
}
public function retrieveByToken($identifier, $token) {
}
public function updateRememberToken(Authenticatable $user, $token) {
}