我正在为现有的娱乐门户网站设置一个新的REST web服务和附带的Android应用程序。我停在了不同于那个门户网站的地方,我想让安卓用户使用他们的谷歌或脸书账户登录。登录可以让人们在门户网站上留下评论,但数据库约束要求用户帐户存在于同一数据库中(例如,每个Comment记录都引用Users表中的user_id记录)。
所以我需要根据谷歌/脸书的个人资料创建自己的用户帐户,对吧?你建议如何处理这个问题?
我关心的是,在我自己的数据库中,帐户的唯一标识符应该是什么?目前,在这个遗留数据库中,它只是一个"登录"。我可以从人们的名字和姓氏组成登录,但这当然可能会冲突。这应该是像"login"+"account_origin"这样的复合密钥吗?其中account_origin'是"legacy/google/facebook/others…"?
一般情况下,记录ID应由您的服务单独控制。我个人喜欢总是使用UUID4(优点/缺点),有些人喜欢使用作为SQL主键常见的顺序ID。
一个可扩展的身份资源可以是这样的:
{
"id": "2d19b086-d8eb-11e4-b9d6-1681e6b88ec1",
"name": "Kitten Smith",
"emails": ["kitten@example.com", "kittensmith@example.org"],
"profiles": [{
"id": "1234",
"service": "facebook"
}, {
"id": "5678",
"service": "google"
}]
}
现在,这显然有些复杂,并且根据您的数据库,您可能希望将emails
和profiles
拆分为它们自己的表。不过,这一点的好处是,一个用户可以添加他们想要的任意多的电子邮件和第三方个人资料来获得他们的单一身份。
如果你想要一个更有限的版本,用户只能从每个网络获得一封电子邮件和一个配置文件,你可以这样做:
{
"id": "2d19b086-d8eb-11e4-b9d6-1681e6b88ec1",
"name": "Kitten Smith",
"email": "kitten@example.com",
"facebook_id": "1234",
"google_id": "5678"
}