Laravel 5.3 — Социальный логин сомневается

Я разрабатываю мобильное приложение и в настоящее время полагаюсь на JWT для поддержки API без сохранения состояния. API используется мобильными и веб-устройствами. Пользователи будут использовать свой адрес электронной почты и пароль для регистрации.

Мне поручено реализовать опцию социального входа в систему в этом API. Я хотел бы прояснить мои следующие сомнения.

1) Когда используется Social Login, как я могу сгенерировать токен [например, JWT], который будет храниться на стороне клиента? Этот токен предполагается отправлять со всеми последующими запросами после входа в систему.

2) Если социальные платформы не предоставляют / не предоставляют адрес электронной почты [который является одним из наших первичных ключей], какую информацию я буду хранить?

11

Решение

КОРОТКИЙ ОТВЕТ

  1. Вы должны связать пользователя социального входа в свою стандартную таблицу пользователей и сгенерировать токен (JWT), как вы уже делаете
  2. Социальные логины всегда возвращают идентификатор, идентифицирующий пользователя в социальном. Во внешней таблице сохраните используемый социальный и социальный идентификаторы вместе с идентификатором пользователя вашей основной таблицы пользователей.

ДОЛГО ОТВЕТ

Давайте начнем с самого начала, чтобы лучше рассмотреть все проблемы и прояснить все аспекты ваших сомнений.

Базовая таблица пользователей
Обычно у вас есть таблица пользователей, структурированная таким образом (упрощенно)

  • Идентификатор пользователя
  • Логин (Email)
  • пароль
  • jwt_token

Когда пользователь входит в систему, вы собираетесь обновить поле jwt_token и вернуть его пользователю, чтобы использовать ваши API.

Реализация социальных логинов
Хорошим подходом для добавления социальных логинов является создание новой таблицы social_logins, структурированной следующим образом (упрощенно)

  • Социальное
  • social_id
  • Идентификатор пользователя

После того, как вы «социальный логин» пользователя, вы получаете список данных из самой социальной сети. Обратите внимание, что пользователи могут запретить получение личного адреса электронной почты (например, из Facebook), даже если вы явно запрашиваете его.

Первое, что вам нужно сделать, это проверить, вернул ли вам социальный адрес электронной почты пользователя.

  • если письмо возвращено, найдите пользователя с таким адресом электронной почты в таблице пользователей и создайте запись в таблице «social_logins», создавая связь с пользователем с помощью поля user_id
  • если электронная почта пуста, вам нужно создать нового пользователя в пользовательской таблице, создав «поддельный» адрес электронной почты (стандартным методом — не случайно), а затем создать свою запись social_login

Чтобы избежать создания двойных пользователей (разных адресов электронной почты), я всегда предпочитаю попросить пользователя подтвердить свой адрес электронной почты: с помощью этого простого вопроса вы можете отложить предыдущую проверку и сократить количество двойных пользователей. Таким образом, если социальный логин не возвращает вам адрес электронной почты, вы просто показываете пустое поле с просьбой заполнить его адресом электронной почты, который вы затем будете использовать для поиска пользователя в таблице пользователей. Если вы получили его, просто покажите пользователю заполненное поле и попросите его подтвердить адрес электронной почты или изменить его, если он предпочитает использовать другой адрес или если он уже зарегистрирован в вашем приложении с другим адресом электронной почты.

1

Другие решения

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

Используйте эти данные для регистрации пользователя в вашей собственной системе. Прикрепите также предоставленный токен доступа. В зависимости от запрошенных вами разрешений вы можете использовать токен для выполнения дополнительных действий в социальной платформе.

Затем введите JWT, который будет использоваться в качестве токена аутентификации в веб-приложении / мобильном приложении, где пользователь вошел в систему. Обратите внимание, что этот JWT должен быть независимым от токена доступа, отправленного провайдером аутентификации. Включите некоторые претензии интереса, такие как sub или же exp и подпишите его секретным ключом. Например

 {
"sub": "userid",     //unique user id assigned in your system
"name": "User name"  //Name provided by social
"iss": "issuer",     //you are the issuer
"exp": 1300819380,   //Expiration date
"login":"facebook"   //login method used
}

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector