繁体   English   中英

Laravel 5.3 - 社交登录疑惑

[英]Laravel 5.3 - Social login doubts

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

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

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

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

简短的回答

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

长期回答

让我们从头开始,以便更好地了解所有问题,并清除你所怀疑的所有方面。

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

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

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

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

  • 社会
  • social_id
  • 用户身份

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

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

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

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

某些社交网络允许委派用户身份验证,或者在您自己的系统中需要凭据。 当用户登录时,外部平台将为您提供一个访问令牌,可用于获取用户的某些信息。

使用此数据将用户注册到您自己的系统中。 还附加提供的访问令牌。 根据您请求的权限,您可以使用令牌在社交平台中执行其他操作。

然后发出一个JWT,用作用户登录的Web /移动应用程序中的身份验证令牌。 请注意,此JWT必须独立于身份验证提供程序发送的访问令牌。 包括一些感兴趣的索赔,如subexp ,并使用密钥签名。 例如

 {
   "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登录时在Twitter中启动登录进程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM