2015-03-31 107 views
0

我正在为现有娱乐门户设置一个新的REST Web服务和附带的Android应用程序。我停止了与该门户网站不同的地方,我希望让Android用户使用他们的Google或Facebook帐户登录。 Singing in会让人们在门户上发表评论,但数据库约束要求在同一数据库中存在用户帐户(例如,每个评论记录引用Users表中的user_id记录)。基于谷歌或其他帐户在自己的网站注册的用户帐户

所以我需要基于Google/Facebook个人资料创建自己的用户帐户,对吧?你会如何建议这样做?

我很关心在我自己的数据库中帐户的唯一标识符是什么?目前在传统数据库它只是一个'登录'。我可以撰写来自人名和姓氏的登录信息,但这可能会发生冲突。 这应该是一个复合键,如'login'+'account_origin',其中account_origin是'legacy/google/facebook/others ...'?

回答

1

通常记录ID应该完全由您的服务控制。我个人喜欢总是使用UUID4spros/cons),有些人喜欢使用作为SQL主键常用的顺序标识。

一个可扩展的身份资源看起来是这样的:

{ 
    "id": "2d19b086-d8eb-11e4-b9d6-1681e6b88ec1", 
    "name": "Kitten Smith", 
    "emails": ["[email protected]", "[email protected]"], 
    "profiles": [{ 
     "id": "1234", 
     "service": "facebook" 
    }, { 
     "id": "5678", 
     "service": "google" 
    }] 
} 

现在显然是有些复杂,这取决于你的数据库,你可能想emailsprofiles分裂成他们自己的表。虽然这个方面很好,但单个用户可以添加他们想要的单个身份的多个电子邮件和第三方配置文件。

如果你想更有限的版本,用户只能从每个网络一个电子邮件地址和一个配置文件,你可以做这样的事情:

{ 
    "id": "2d19b086-d8eb-11e4-b9d6-1681e6b88ec1", 
    "name": "Kitten Smith", 
    "email": "[email protected]", 
    "facebook_id": "1234", 
    "google_id": "5678" 
} 
+0

有用的例子,谢谢。许多网站使用外部凭证提供登录功能我想知道他们用它做了什么,他们应该将外部配置文件转换为内部配置文件。尽管这种广泛使用的方法,我无法找到任何与此相关的信息 – ievgen 2015-04-02 06:38:29