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

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

1) создать в базе для юзера несколько дополнительных полей для каждой социальной сети
2) создать несколько дополнительных таблиц к каждой социальной сети и делать привязку по id пользователя.
  • Вопрос задан
  • 1542 просмотра
Решения вопроса 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: для всех социальных сетей. Просто в ней нужно специальное поле идентификатор соц. сети.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
от 80 000 до 100 000 ₽
ROIburo Екатеринбург
от 60 000 до 100 000 ₽
от 90 000 до 110 000 ₽
21 сент. 2020, в 07:59
110000 руб./за проект
21 сент. 2020, в 07:36
600 руб./в час
21 сент. 2020, в 07:08
3000 руб./за проект