@Anonymous12344321

Как правильно определять, какой guard используется в сессии?

На сайте есть система авторизации, которая позволяет пользователю зарегистрироваться либо через сам сайт(классический ввод email, имени и пароля) или через вк. В этой связи возникла проблема: Очевидно, что если пользователь хочет войти через соцсеть, то такие поля, как, к примеру, пароль ему будут просто не нужны. Но если на сайте существует база данных с единой таблицей для пользователей, то столбец с паролем будет просто необходим для заполнения. Поэтому было решено создать отдельную базу данных для пользователей, вошедших через вк и пользователей, которые регистрировались через основную систему сайта. Соответственно и модели теперь тоже две (User и VkUser). Модель VkUser была занесена в config/auth.php как дополнительный guard. Теперь, если пользователь входит через вк, модель VkUser либо сохраняется в базу для пользователей вк, либо берется из нее если уже была создана и сохранятся при помощи функции auth('vkUser')->login($vkUser) в сессию авторизации как guard vkUser. С пользователями, которые регистрировались не через соцсеть, ситуация такая же, но залогиниваются они как гард user, т.е auth('user')->login($user). Но каким образом потом определять тип гарда, под которым пользователь залогинен? Как вариант, можно использовать банальную проверку в условиях, auth('vkUser')->check() или auth('user')->check, но если гардов будет много(в будущем добавят авторизацию через гугл, телеграм и тд), то условия будут сильно разрастаться, т.е это явно не лучший вариант. Существует ли методика определения гардов? Или мой метод авторизации не является корректным?
  • Вопрос задан
  • 95 просмотров
Решения вопроса 1
JhaoDa
@JhaoDa
LaravelRUS Team
На сайте есть система авторизации, которая позволяет пользователю зарегистрироваться
Это система аутентификации, надо понимать разницу.

Завтра пользователь, зареганный через основную систему, захочет привязать ВК-аккаунт. И что делать будешь? Создавать его дубль? А послезавтра добавятся Одноклассники. Заведешь третью таблицу?

Правильно:
— таблица+модель юзеров;
— таблица+модель соц. аккаунтов с мылом/токеном/аватаркой, связанная с таблицей юзеров.

Если регается через соц.сеть, то создаёшь юзера с пустым/генерируемым паролем, дальше выстраиваешь логику аутентификации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы