не только при помощи email+password, но и при помощи api от google, vk и прочих сервисов.
Должна быть предусмотрена возможность впоследствии добавлять новые стратегии регистрации.
На данный момент таблица Users такая, что password/google_token/vk_token хранятся в отдельных nullable=true столбцах, так что при добавлении новой стратегии регистрации придётся каждый раз менять структуру таблицы.
Как можно организовать хранение таких вот данных, чтобы не пришлось каждый раз изменять таблицу Users и не держать в ней ненужные столбцы?
Подходящим ли решением будет создание отдельной таблицы, в которой будут содержаться данные для аутентификации пользователей?
Зачем тебе вообще хранить в базе сам токен? Он ведь нужен только 1 раз, при регистрации, чтобы забрать у соц. сети информацию о пользователе. В базе можно сделать 2 поля: auth_type, который будет принимать значения из enum USERNAME_AND_PASSWORD, GOOGLE, VK и тд, и поле external_id, в котором будет ID пользователя в соц. сети. Соответственно, при регистрации по токену получаешь инфу о пользователе, по auth_type и external_id смотришь, есть ли такой пользователь в БД. Если нет, то создаёшь его, если нет, то обновляешь данные или ничего не делаешь
у юзера должна быть связанная таблица токенов, все кастомное, что относится только к конкретному поставщику токена - укладывается в jsonb поле
Обсуждают сегодня