Задать вопрос
@JTester

Регистрация/авторизации с помощью соц сетей?

Искал только что статьи по реализации регистрации/авторизации с помощью соц сетей, но кроме обычной вывода информации и голимой статьи не нашёл.

Наткнулся на статью, где пишут о том, что если кидать юзера в базу, то нужно проверять айди, если он есть, то зареган, айди который от вк. А не кажется ли, что это полный бред, т.к. под этим айди может зареган абсолютно другой юзер? Расскажите пожалуйста, как правильно заносить данные в базу, какие данные, что проверять и т.д. Буду рад, если у вас есть какой-то исходник, дабы я глянув)
  • Вопрос задан
  • 295 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
Вообще, есть куча разных сервисов, которых предоставляют API авторизации сразу из коробки. Например, старинный uLogin. Он даёт сразу удобные данные в едином формате для многих социальных сетей. Он так же даёт уникальный ID аккаунта, по которому можно определить, зарегистрирован ли пользователь, или ещё нет.
Но этот вариант плох по многим причинам, основная из которых - зависимость от сомнительного сервиса. Но есть менее сомнительные сервисы, которые выполняют такой функционал.

Крутые ребята делают авторизацию напрямую. Например, тот же ВК. При авторизации он даёт уникальный ID профиля, по которому вы можете проверить уникальность. В идеальном мире в вашей базе данных будет отдельная таблица для авторизаций через Вконтакте, где будет содержаться VK ID и ID пользователя в вашей системе. При попытке зарегистрироваться вы должны проверить, если ли этот VK ID в вашей системе. Если есть - то авторизовать пользователя как уже зарегистрированного, если нет - внести нужные данные в базу и зарегистрировать нового пользователя.

Проблемы начинаются, когда гейтвеев становится больше, чем один VK. В этом случае у вас сразу появляется большая куча лишних таблиц и много логики. Это не плохо само по себе, но не опытному программисту может очень сильно навредить в архитектуре. Поэтому проще всего использовать сторонние сервисы, которые предоставляют единый ID для всех социальных сетей, а вы на своей стороне уже можете даже в таблице с пользователями хранить этот ID для дальнейшей проверки. Но вопрос в цене, конечно. И в поддержке российских соц сетей.

https://auth0.com/learn/social-login
https://firebase.google.com/products/auth
Ответ написан
PageUp
@PageUp
Default
Что бы ID из разныхь соц.сетей не перепутались и не перемешались лучше всего создать отдельную таблицу с данными и разбить ее по названиям соц.сетей.

Берете ID пользователя, который прилетает от соц.сети (у всех соц.сетей есть эти ID и как правило они идут первыми и основными данными). Эти ID внутренние и очень часто они не совпадают с публичными, которые видно в адресной строке, когда заходите в профиль человека в соц.сети.

Создаете запись с названием полученного ID в разделе таблицы посвященном этой соц сети. В нее будет вписываться ваш внутренний ID, что бы потом идентифицировать человека.

В отдельной таблице своей базы у вас при каждой реге должна создаваться отдельная новая графа с вашими внутренними идешниками id1 id 2 и т.д. и в нее вносятся данные о человеке прилетевшие от соц.сети. Все какие есть, каких нехватает, пользователь сможет потом ввести вручную на сайте, если дадите ему такую возможность.

Впоследствии, при авторизации через соц сеть, вам будет вновь приходить ID человека из соц.сети, вы делаете запрос по таблице той соц.сети через которую проходит авторизацию пользователь. В графе с этим ID вы записали свой внутренний ID профиля. Берете его и делаете поиск этого профиля уже по своей общей базе профилей. Находите нужный и берете из него все данные и авторизовываете.

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

И потом этот внутренний ID ищется по вашей базе пользователей и с ним работаете. Если пользователь будет авторизовываться через разные соц.сети, то и профили у него на сайте вашем будут разные. И это каждый пользователь и так понимает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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