Как правильно хранить в базе данные о авторизации юзера через социальную сеть?

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

1) создать в базе для юзера несколько дополнительных полей для каждой социальной сети
2) создать несколько дополнительных таблиц к каждой социальной сети и делать привязку по id пользователя.
  • Вопрос задан
  • 1738 просмотров
Решения вопроса 2
@unity_ultra_hardcore
У нас используется следующая схема таблиц:
Table "public.social_account"
   Column    |              Type              | Modifiers
-------------+--------------------------------+-----------
 user_id     | integer                        | not null
 network     | character varying(255)         | not null
 external_id | character varying(255)         | not null
 created_at  | timestamp(0) without time zone | not null
 updated_at  | timestamp(0) without time zone | not null
 id          | uuid                           | not null
Indexes:
    "social_account_pkey" PRIMARY KEY, btree (id)
    "unique_social_account" UNIQUE, btree (network, external_id)
    "idx_f24d8339a76ed395" btree (user_id)
Foreign-key constraints:
    "fk_f24d8339a76ed395" FOREIGN KEY (user_id) REFERENCES app_user(id) ON DELETE CASCADE


То есть для каждой привязки хранится запись, в которой содержится user_id, название соцсети (google/vk/facebook/etc) и id этой соцсети (у всех произвольный формат).
Таким образом, когда пользователь аутентифицируется через одну из этих соцсетей, сначала ищется user_id по связке external_id + network. Если user_id найден - аутентифицируем текущего пользователя как этот user_id. Если нет, получаем от соцсети email и по нему ищем пользователя в таблице пользователей. Если нашли, то создаем запись в social_account и аутентифицируем юзера. Если не нашлось ничего (первый визит), то создаем пользователя и создаем запись в social_account.
Ответ написан
Serhioromano
@Serhioromano
Web Developer
Не первое и не втрое. Создавать отдельную табилцу на каждую соц сеть не резонно. Нужно создать одун таблицу справочник как поивел пример unity_ultra_hardcore: для всех социальных сетей. Просто в ней нужно специальное поле идентификатор соц. сети.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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