使用社交网站实现登录的webservice

6

我正在处理iOS和Android应用程序的Web服务,并需要开发一个社交媒体登录服务。

该应用需要支持Twitter、Facebook、LinkedIn和Google Plus的登录。

作为参数,我接受来自社交网站的用户ID和此ID来源的网站以及基本用户信息,如名字、姓氏和电子邮件。

以下是相关表的结构

  1. 用户表

    用户ID | 电子邮件 | 设备ID | 名字 | 姓氏 | 密码

用户ID是主键,电子邮件是唯一的

  1. 用户社交媒体表

    用户ID | 网站 | 令牌

当我从前端获取这些信息时,我首先检查社交用户ID是否已经存在。如果社交ID不匹配,则检查电子邮件是否存在于数据库中。如果电子邮件不在数据库中,则注册新用户。

现在的主要问题是,Android和iOS的Twitter SDK不返回电子邮件,即使用户通过电话注册,Facebook也不会返回电子邮件,因此我在我的端上无法唯一标识用户。我已经搜索了很多但找不到任何解决方案。

请纠正我在任何地方错误的做法,并建议我如何处理电子邮件问题。


@usumoio 的前端开发人员直接发送用户ID信息,因此我不需要在我的端使用OAuth。无论如何,你有什么建议? - alwaysLearn
当时那只是一次瞎猜。SDK文档中是否提到了通过附加修饰符包含其他参数,例如电子邮件? - usumoio
1
您应该使用外部服务返回的用户 ID 来识别您系统中的用户。 - CBroe
1
然后告诉您的用户,要连接这两个不同的帐户,他们应该先使用其中一个登录到您的网站,然后再连接到另一个帐户 - 这样您就知道它们属于同一用户。 - CBroe
1
不,几乎没有其他方法可以在社交网络上唯一地识别任何用户。即使您获得了电子邮件地址,他们可能已经使用不同的电子邮件地址注册了不同的社交网络。 - CBroe
显示剩余3条评论
3个回答

3
我建议使用一个表格来表示两种类型的用户,如下所示:

userid | type | email | socialid | deviceid | firstname | lastname | password | token

"type"列将是一个可能的账户类型的枚举("fb", "twitter", "google"或"email")。
"socialid"将包含来自社交网络的用户id(该id包含在oauth响应中),对于普通用户(通过电子邮件注册)将为null。
"email"将包含普通用户的电子邮件,对于社交用户将为null。
然后只需要进行SELECT查询来了解您正在处理哪种类型的用户。

那么一个拥有两个社交ID的用户将在您的表中具有反规范化记录。 - Pradeep Sanjaya
在我的例子中,我并没有考虑将不同的账户绑定在一起,但如果您需要这样做,您将不得不坚持使用两个表的结构。 - Eugene Sue

2

0

通常情况下,Facebook API应该包含用户ID。Twitter SDK则有些棘手。尝试将用户的Twitter用户名保存在您的数据库中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接