VadimVolkovsky / practicum_middle_33_auth

0 stars 0 forks source link

Рефакторинг OAuth #76

Closed VadimVolkovsky closed 1 week ago

VadimVolkovsky commented 1 week ago

Имена провайдеров авторизации лучше принимать в качестве строкового параметра. А не как тут явно указан google. Дело в том, что провайдеров авторизации у нас может быть десяток, а ендпоинтов у нас хватит и двух.

Необходимо подготовить код к расширению списка провайдеров авторизации. Сейчас вы очень жестко привязались к google. Попробуйте еще какой-нибудь добавить и увидите, что там будет очень много общего. Можно будет создать базовый класс с общим функционалом и от него наследоваться.

Вы всю логику реализовали в эндпоинте, давайте вынесем в сервисный слой.

Смотрите, OAuth2 - протокол авторизации, но не аутентификации, и про это написано в теории и рассказано почему. Т.е. он подтверждает, что у этого пользователя есть какие-то права в соцсети (нам достаточно того, что соцсеть подтвердит нам, что он там есть). Далее мы на основании этой информации создаем своего пользователя в своей базе (для аутентификации) и привязываем эту соцсеть к нему. При этом, если соцсеть выдает адрес электронной почты, то используем его, если нет, то создаем какой-то уникальный, так же генерим пароль. При этом фронтэнд будет пользователю постоянно напоминать, что укажите вашу актуальную почту и придумайте свой пароль. Я все это к тому, что у вас нет модели связывающей пользователя и соцсеть, а еще вы рассчитываете, что соцсеть выдаст email пользователя, но это бывает далеко не всегда. К тому же при вашем подходе, мы не можем добавить к существующему пользователю социальную сеть или несколько соцсетей, открепить от пользователя сеть.