2017-02-19 26 views
11

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

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

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

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

+0

Социальный вход - это только подтверждение того, кто аутентифицирован. У вас все равно будет запись пользователя в вашем db для этого конкретного пользователя. Поэтому после входа в систему вы создадите JWT так же, как всегда. На какой платформе вы беспокоитесь о том, что не будете отправлять адрес электронной почты? Почти каждая служба также будет иметь некоторый тип идентификатора пользователя, поэтому ваша таблица пользователя может иметь такие поля, как 'facebook_id'' twitter_id' и т. Д. ... – Pitchinnate

+0

Большинство социальных платформ предоставляет вам адрес электронной почты (за исключением Twitter, который я считаю). Я предполагаю, что вы можете сделать перенаправление к вашему приложению после успешной поездки в веб-объект. –

+0

@logeeks вы нашли ответ на свой вопрос? –

ответ

1

SHORT ОТВЕТ

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

LONG ANSWER

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

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

  • user_id
  • Логин (адрес электронной почты)
  • пароль
  • jwt_token

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

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

  • социального
  • social_id
  • user_id

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

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

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

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

+0

В этот день действительно хорошая статья была написана на сайте с использованием Laravel Socialite https://www.sitepoint.com/easily-add-social-logins-to-your-app-with-socialite/ –

0

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

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

Затем введите 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