【问题标题】:Database design for OpenID, Oauth: Twitter and FacebookOpenID、Oauth 的数据库设计:Twitter 和 Facebook
【发布时间】:2011-08-02 14:25:30
【问题描述】:

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

在他们使用 oAuth/OpenID 登录后(在你想知道之前:yes I have looked up the difference *),我会要求他们选择一个用户名。

我只需要用户的电子邮件地址和全名(以及 IP 地址,但现在不相关)。

我现在使用的当前表是:

author (id, fullname, username, password, salt, ip_address, email_hash, verified, created, deleted)

密码经过哈希处理,email_hash 用于恢复丢失的用户名。

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

* 或OAuth? ,OpenID? Neither? Which one should my site support?

【问题讨论】:

    标签: sql database


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 应该 remote_source_id 是 varchar(255) 还是 text?你认为应该多长时间?
    • varchar(255) 应该涵盖所有情况。
    • @Gazier:你能详细说明你的第二段吗? you can marry it up with the remote id from your table and if it exists log them in 是什么意思,remote.id 是什么?但是,我更喜欢连接表的第二种情况。
    • 为了支持社交媒体登录,我们应该考虑为这些帐户生成假密码还是将其保留为空?通常我们从外部站点获取令牌并仅使用它来获取数据,我们是否需要将任何内容与我们的系统进行比较以进行后续登录?
    • remote_source_users 上的索引是什么,它有自己的主键自增吗?将 remote_source_id 作为主键是否安全?既然 twitter 和 facebook 可能会不小心给出相同的 id,那么复合主键作为 (source_id, source) 怎么样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2012-12-04
    • 1970-01-01
    • 2010-11-03
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多