我正在开发一个移动应用程序,目前依赖 JWT 来维护 API 的无状态性。 API 由移动和网络设备使用。用户将使用他们的电子邮件和密码进行注册。
我被指派在此 API 中实现社交登录选项。我想澄清一下我的以下疑问。
1) 使用社交登录时,我如何生成将存储在客户端的 token [如 JWT]?此 token 应在登录后随所有后续请求一起发送。
2) 如果社交平台不提供/共享电子邮件地址 [这是我们的主键之一],我应该存储哪些信息?
最佳答案
简短回答
- 您必须将社交登录用户链接到您的标准用户表,并像您已经在做的那样生成 (JWT) token
- 社交登录始终会返回一个 ID,以识别社交用户。在外部表中,存储使用的社交和 social_id,以及您主用户表的 user_id
长答案
让我们从头开始,以便更好地了解所有问题并清除您疑虑的所有方面。
基本用户表
通常你有一个以这种方式构造的用户表(简化)
- 用户编号
- 登录(电子邮件)
- 密码
- jwt_token
当用户登录时,您将更新 jwt_token 字段并将其返回给用户以便使用您的 API。
实现社交登录
添加社交登录的一个好方法是创建一个新的 social_logins 表,其结构如下(简化)
- 社交
- 社会编号
- 用户编号
一旦您“社交登录”用户,您就会从社交网络本身获得数据列表。请注意,即使您明确要求,用户也可以禁止检索私有(private)电子邮件地址(例如来自 Facebook)。
您要做的第一件事是检查社交是否向您返回了用户的电子邮件地址。
- 如果收到电子邮件,请在您的用户表中查找具有该电子邮件地址的用户,并在“social_logins”表中创建一条记录,使用 user_id 字段创建与该用户的关系
- 如果电子邮件为空,您必须在用户表中创建一个新用户,创建一个“假”电子邮件地址(使用标准方法 - 不是随机的),然后创建您的 social_login 记录
为了避免创建双重用户(不同的电子邮件地址),我总是更愿意要求用户确认他的电子邮件地址:通过这个简单的问题,您可以推迟之前的检查并减少双重用户的数量。因此,如果社交登录没有向您返回电子邮件地址,您只需显示一个空白字段,要求用户填写他们的电子邮件地址,然后您将使用该地址在用户表中查找用户。相反,如果您得到了它,只需向用户显示相同的字段并要求他确认电子邮件地址,或者如果他更喜欢使用其他地址或者如果他已经使用其他电子邮件地址注册到您的应用程序则更改它。
关于php - Laravel 5.3 - 社交登录疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42327282/