конфликт user_id для нескольких охранников laravel - PullRequest
2 голосов
/ 31 октября 2019

Я новичок в Laravel и создал двух охранников: "user guard" (по умолчанию один) и "admin guard". И я сохраняю сеансы аутентификации в базе данных вместо файла.

Теперь проблема в том, что идентификатор пользователя вызывает конфликт в таблице сеансов. Например, если я создаю нового пользователя в таблице пользователей и новую учетную запись администратора в таблице администраторов, у обоих будет одинаковый идентификатор в таблице сеансов, и, поскольку идентификатор не уникален, он автоматически регистрирует меня в учетной записи администратора, даже если я просто вхожу как обычнопользователь.

Я уже искал в Google, но не смог найти ничего полезного. Только этот парень задал тот же вопрос, но не рабочий ответ: Многосессионные таблицы в Laravel

Вот мой код: config / auth.php

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

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',

    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,

    ]
],

AdminLoginController.php

if (auth()->guard('admin')->attempt(['email' => $request->email, 'password' => $request->password])) {
    $user = auth()->guard('admin')->user();
    return redirect()->route('admin');

}

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Я не уверен, что это противоречит. Я считаю, что вы просто неправильно используете охрану.

Вы должны убедиться, что вы никогда не звоните Auth::user(), если вы входите в систему как Admin. Вы должны всегда использовать Auth::guard('admin')->user().

0 голосов
/ 31 октября 2019

Вероятно, не должно быть отдельной таблицы и отдельной красноречивой модели для администратора, так как администратор является пользователем. Это просто пользователь с повышенными разрешениями.

Вместо создания отдельной модели, защиты и поставщика для администраторов рассмотрите возможность добавления ролей и / или разрешений к вашей модели пользователя, чтобы отслеживать, является ли пользователь администратором.

Вот хороший пакет, чтобы помочь с этим: https://github.com/spatie/laravel-permission

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