[英]Laravel 5.3 - Social login doubts
我正在开发一个移动应用程序,目前依赖于JWT来维护API的无状态。 API由移动和Web设备使用。 用户将使用他们的电子邮件和密码进行注册。
我被分配在此API中实现社交登录选项。 我想澄清我的疑虑。
1)当使用社交登录时,如何生成将存储在客户端的令牌[如JWT]? 此令牌应在登录后与所有后续请求一起发送。
2)如果社交平台没有提供/共享电子邮件地址[这是我们的主要密钥之一],我应该存储哪些信息?
简短的回答
长期回答
让我们从头开始,以便更好地了解所有问题,并清除你所怀疑的所有方面。
基本用户表
通常你有一个以这种方式构建的Users表(简化)
当用户登录时,您将更新jwt_token字段并将其返回给用户以使用您的API。
实施社交登录
添加社交登录的一个好方法是创建一个新的social_logins表,结构如下(简化)
一旦您“社交登录”用户,您将获得社交网络本身的数据列表。 请注意,即使您明确要求,用户也可以禁止检索私人电子邮件地址(例如来自Facebook)。
您要做的第一件事是检查社交网站是否返回了用户的电子邮件地址。
为了避免创建双重用户(不同的电子邮件地址),我总是要求用户确认他的电子邮件地址:通过这个简单的问题,您可以推迟以前的检查并减少双重用户的数量。 因此,如果社交登录没有返回您的电子邮件地址,您只需显示一个空字段,要求用户使用他们用于在users表中查找用户的电子邮件地址填写它。 如果您得到它,只需向用户显示相同的字段填写并要求他确认电子邮件地址或更改它,如果他更喜欢使用其他地址或他已经使用其他电子邮件地址注册到您的应用程序。
某些社交网络允许委派用户身份验证,或者在您自己的系统中需要凭据。 当用户登录时,外部平台将为您提供一个访问令牌,可用于获取用户的某些信息。
使用此数据将用户注册到您自己的系统中。 还附加提供的访问令牌。 根据您请求的权限,您可以使用令牌在社交平台中执行其他操作。
然后发出一个JWT,用作用户登录的Web /移动应用程序中的身份验证令牌。 请注意,此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登录时在Twitter中启动登录进程
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.