我有一个RESTful API,多个客户端可以连接到该API(Web,iOS和Android应用程序)。当前,用户只能使用用户名和密码创建帐户(电子邮件是可选的),并且在数据库中将使用这些列来表示它们。
用户通过发布到/ session端点通过我们的API“登录”。 API响应是一个新的秘密令牌(我们将其与用户名相关联)。客户端使用此令牌对客户端发起的所有POST请求进行签名,我们的API稍后将其用于对请求进行身份验证。
但是,我们现在要允许社交登录(Google +,FB,Twitter)。我们的用户还希望使用社交登录方便,但希望他们选择自己的随机用户名显示在评论旁边,等等。
我的问题:为了支持社交登录,我需要对API进行哪些更改?我是否需要对数据库架构进行重大更改以支持此功能?如果可以,究竟要做什么?另外,服务器是否需要了解社交登录提供商授予的访问令牌的任何信息?
[请注意,此功能的范围不包括将多个社交登录帐户与同一个人关联的功能。我想让事情尽可能简单。
通常对如何正确实施此方法感到困惑。我希望使事情尽可能简单,以便为简单的解决方案加分。任何建议将不胜感激。
用户(用户ID整数,昵称varchar(64),电子邮件varchar(255),密码varchar(64),email_verified布尔值,启用的布尔值,created_at timestamptz,updated_at timestamptz)
这里要注意的是,user_id是主键,昵称是唯一的,电子邮件是唯一的,email_verified的默认值为FALSE,启用的默认值为TRUE,由于社交登录,密码是可选的
] >我的social_tokens表看起来像这样
social_tokens(provider_user_id varchar(255),provider_type枚举('facebook','twitter','google','github'),user_id整数,access_token varchar(255),refresh_token varchar(255),时间戳过期, created_at timestamptz,udpated_at timestamptz)
虽然可以争辩到provider_user_id对于给定社交网络中的每个用户都是UNIQUE,但是不同的社交网络又如何呢?因此组合
这个想法是每个用户可能有多个社交登录名