我如何将社交登录集成到我现有的用户模式/登录系统?

问题描述 投票:6回答:1

我有一个RESTful API,多个客户端可以连接到该API(Web,iOS和Android应用程序)。当前,用户只能使用用户名和密码创建帐户(电子邮件是可选的),并且在数据库中将使用这些列来表示它们。

用户通过发布到/ session端点通过我们的API“登录”。 API响应是一个新的秘密令牌(我们将其与用户名相关联)。客户端使用此令牌对客户端发起的所有POST请求进行签名,我们的API稍后将其用于对请求进行身份验证。

但是,我们现在要允许社交登录(Google +,FB,Twitter)。我们的用户还希望使用社交登录方便,但希望他们选择自己的随机用户名显示在评论旁边,等等。

我的问题:为了支持社交登录,我需要对API进行哪些更改?我是否需要对数据库架构进行重大更改以支持此功能?如果可以,究​​竟要做什么?另外,服务器是否需要了解社交登录提供商授予的访问令牌的任何信息?

[请注意,此功能的范围不包括将多个社交登录帐户与同一个人关联的功能。我想让事情尽可能简单。

通常对如何正确实施此方法感到困惑。我希望使事情尽可能简单,以便为简单的解决方案加分。任何建议将不胜感激。

authentication database-design login oauth single-sign-on
1个回答
0
投票
  • 我有完全相同的问题
  • 我需要Facebook Twitter Google和GitHub登录
  • 让我们看看它应该如何工作
  • 我有2个表,一个用户表和一个社会令牌表
  • 我的用户表看起来像这样

用户(用户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是社交网络分配给每个用户的唯一ID
  • provider_type在我的情况下是一个具有4个值的枚举,facebook,twitter,google和github
  • user_id参考用户表中的user_id
  • access_token和refresh_token(如果提供)只是提供者分配的令牌
  • Google似乎有过期的概念,所以我也添加了一个expires列,其余的都是可选的
  • [PRIMARY KEY是(provider_user_id,provider_type,user_id)的组合,因为单个用户可能具有多个社交登录名,所以user_id不能为主键
  • 虽然可以争辩到provider_user_id对于给定社交网络中的每个用户都是UNIQUE,但是不同的社交网络又如何呢?因此组合

  • 这个想法是每个用户可能有多个社交登录名

  • 如果您同时拥有Twitter [email protected]和Facebook [email protected],并且如果您都通过一次至少两次登录,那么它们现在都是您登录的一部分
© www.soinside.com 2019 - 2024. All rights reserved.