Laravel 5.3 - 社交登录疑惑

log*_*eks 11 php facebook jwt laravel-5

我正在开发一个移动应用程序,目前依赖于JWT来维护API的无状态.API由移动和Web设备使用.用户将使用他们的电子邮件和密码进行注册.

我被分配在此API中实现社交登录选项.我想澄清我的疑虑.

1)当使用社交登录时,如何生成将存储在客户端的令牌[如JWT]?此令牌应在登录后与所有后续请求一起发送.

2)如果社交平台没有提供/共享电子邮件地址[这是我们的主要密钥之一],我应该存储哪些信息?

Sim*_*ino 1

简短回答

  1. 您必须将社交登录用户链接到标准用户表并生成 (JWT) 令牌,就像您已经在做的那样
  2. 社交登录始终返回识别社交用户的 ID。在外部表中,存储使用的社交和social_id,以及主用户表的user_id

长答案

让我们从头开始,以便更好地看待所有问题并消除您的疑虑。

基本用户表
通常您有一个以这种方式构造的用户表(简化)

  • 用户身份
  • 登录(电子邮件)
  • 密码
  • jwt_token

当用户登录时,您将更新 jwt_token 字段并将其返回给用户以便使用您的 API。

实现社交登录 添加
社交登录的一个好方法是创建一个新的 Social_logins 表,其结构如下(简化)

  • 社会的
  • 社交ID
  • 用户身份

一旦您“社交登录”用户,您就会从社交网络本身获得数据列表。请注意,即使您明确要求,用户也可以禁止检索私人电子邮件地址(例如来自 Facebook)。

您要做的第一件事是检查社交媒体是否向您返回了用户的电子邮件地址。

  • 如果返回电子邮件,请在用户表中查找具有该电子邮件地址的用户,并在“social_logins”表中创建一条记录,使用 user_id 字段创建与用户的关系
  • 如果电子邮件为空,您必须在用户表中创建一个新用户,创建一个“假”电子邮件地址(使用标准方法 - 非随机),然后创建您的 Social_login 记录

为了避免创建双重用户(不同的电子邮件地址),我总是更喜欢要求用户确认他的电子邮件地址:通过这个简单的问题,您可以推迟之前的检查并减少双重用户的数量。因此,如果社交登录没有返回您的电子邮件地址,您只需显示一个空字段,要求用户填写其电子邮件地址,然后您将使用该地址在用户表中查找用户。如果您收到了,只需向用户显示填写的相同字段,并要求他确认电子邮件地址,或者如果他更喜欢使用其他地址或者已经使用其他电子邮件地址注册到您的应用程序,请更改它。