Laravel 7 UI - Драйвер Sessions Guard - Spat ie Пакет разрешений - PullRequest
0 голосов
/ 11 апреля 2020

Вкратце: драйвер Sessions guard отклоняет мои попытки входа в систему.

Перед созданием пользовательского интерфейса Laravel я уже создал систему аутентификации для моего интерфейса, используя JWT в качестве драйвера защиты API.

Я установил пользовательский интерфейс Laravel, чтобы использовать пакет разрешений Spat ie, который также был установлен и создал несколько дополнительных таблиц.

После установки пользовательского интерфейса Laravel я успешно зарегистрировался новый пользователь, но не был перенаправлен на домашний экран. Я попытался войти в систему как новый пользователь и получил ответ о том, что мои учетные данные не были распознаны. Затем я попытался войти в систему с пользователем, который был ранее создан в таблице пользователей, посредством регистрации через внешний интерфейс ...

Хотя в этот раз он не выдал ошибку, он все равно не перенаправил меня. Затем я попытался войти в приложение веб-интерфейса с помощью только что созданного пользователя и смог это сделать. В этот момент я обнаружил конфликт с токенами.

Я посмотрел в RegisterController. php и увидел следующее:

    protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

Моя система аутентификации JWT внешнего интерфейса также использует User. php и вот я посмотрел и увидел, что пароль шифровался дважды. Сначала с Ha sh :: а затем с bcrypt. Поэтому я удалил шифрование Ha sh.

Я успешно зарегистрировался, но снова не был перенаправлен на дом. Я попытался войти снова и снова не смог сделать это, но на этот раз я не получил сообщение об ошибке! Зарегистрированный пользователь теперь вел себя так же, как и пользователи, зарегистрированные через приложение переднего плана.

Я построчно просматривал код, тратя часы на вывод значений и т.д. c. и мог видеть, что все принимается, и я был перенаправлен на дом, но HomeController. php затем передавал мои учетные данные через аутентификацию, которая отклоняла их, а затем перенаправлял меня обратно для входа в систему !!

Единственный способ получить доступ к дому - это изменить промежуточное ПО в HomeController. php с 'auth' на 'guest':

    public function __construct()
{
    $this->middleware('guest'); // changed from 'auth'
}

В документации Spat ie заявляет следующее:

Если ваше приложение использует только одну защиту, но не является веб-сайтом (по умолчанию Laravel, который показывает «first» в файле конфигурации auth), то измените порядок перечисленных вами защитников в ваш config / auth. php, чтобы указать вашу основную охрану по умолчанию и как первую в списке определенных охранников. Пока вы редактируете этот файл, лучше всего удалить и все не используемые вами средства защиты.

Поэтому я переключил защиту в config / auth. php, чтобы api был первым, но это не имело никакого эффекта.

    'guards' => [

    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],

    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
],

Интерфейс использует API Api Guard, а серверная часть использует веб, но они оба используют одно и то же приложение / пользователя. Это, я думаю, должно быть причиной проблемы, но я новичок в Laravel, и после нескольких часов чтения и тестирования я все еще борюсь. Что он хочет, что мне не хватает !? Теперь пароль принимается, поэтому не может быть, чтобы ...

Любая помощь была бы очень признательна. Спасибо.

1 Ответ

0 голосов
/ 11 апреля 2020

Проблема была в верхней части config / auth, которую я пропустил:

        'defaults' => [
        'guard' =>'api',
        'passwords' => 'users',
        ],

Дело не в том, что я был отклонен драйвером веб-сессии - это было то, что веб-защита была перезаписывается API Api в разделе по умолчанию выше.

Я должен указать в маршрутизации, какое промежуточное программное обеспечение я хотел, чтобы избежать по умолчанию:

Route::get('/home', [
'middleware' => 'auth:web', 'uses' => 'HomeController@index'])->name('home');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...