Laravel использует неверный пользовательский провайдер - PullRequest
0 голосов
/ 27 августа 2018

У нас есть два типа пользователей, «пользователи», которые используют стандартные леса авторизации 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) {

}

1 Ответ

0 голосов
/ 29 августа 2018

Welp, похоже, что у некоторых пользователей была старая версия cookie аутентификации, в которой не было их уникального идентификатора. Очистка их кэша позволила им войти в систему. Никогда бы об этом не подумал!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...