Sql OpenID、Oauth:Twitter和Facebook的数据库设计

Sql OpenID、Oauth:Twitter和Facebook的数据库设计,sql,database,Sql,Database,如果我的用户选择不直接注册到我的网站,我想允许他们使用OpenID、Twitter和Facebook登录 在他们使用oAuth/OpenID登录之后(在您怀疑之前:*),我将要求他们选择一个用户名 我只需要从用户那里得到他们的电子邮件地址和全名(以及IP地址,但现在不相关) 我现在使用的当前表格是: author (id, fullname, username, password, salt, ip_address, email_hash, verified, created, deleted)

如果我的用户选择不直接注册到我的网站,我想允许他们使用OpenID、Twitter和Facebook登录

在他们使用oAuth/OpenID登录之后(在您怀疑之前:*),我将要求他们选择一个用户名

我只需要从用户那里得到他们的电子邮件地址和全名(以及IP地址,但现在不相关)

我现在使用的当前表格是:

author (id, fullname, username, password, salt, ip_address, email_hash, verified, created, deleted)
密码被散列,电子邮件散列用于恢复丢失的用户名

如何更改此结构以支持具有一个用户名的OpenID/oAuth帐户


*或者

您的表中需要另外两个字段,一个是登录源(twitter、openID、facebook),另一个是源用户id(twitter、openID、facebook提供的id)。我建议将其设置为字符串,因为一些登录源的用户id中包含字母,而不仅仅是数字

然后,当他们登录时,您已经知道他们尝试登录的来源,您可以将其与表中的远程id相结合,如果存在,则将其登录,如果不存在,则将其发送到您的注册表,让他们填写姓名和电子邮件

在这种情况下,您可以做的另一件事是创建联接表:

remote_source_users (user_id:integer, remote_source_id:string, remote_source:string)

这意味着您可以为同一用户支持多个远程帐户。

远程源id是varchar(255)还是文本?你认为应该多长时间?瓦尔查(255)应该涵盖所有情况。@Gazier:你能详细说明一下你的第二段吗?您所说的
是什么意思?您可以将它与表中的远程id结合起来,如果它存在,请将它们记录在
中,什么是remote.id?但是,我更喜欢第二种情况:加入社交表。为了支持社交媒体登录,我们应该考虑生成一个假密码还是让这些帐户无效?通常我们从外部站点获取一个令牌,并将其仅用于获取数据,我们是否需要将任何内容与我们的系统进行比较以供后续登录?远程源用户的索引是什么,它是否有自己的主键自动递增?将远程源id作为主键是否安全?既然twitter和facebook可能会意外地给出相同的id,那么复合主键(source_id,source)又如何呢?