【发布时间】:2010-12-05 00:12:28
【问题描述】:
这是一个数据库问题。我已经安装并运行了一个 openid 库。
我想在我正在开发的网站上使用 OpenID。用户分为三种类型。
- 使用电子邮件/密码进行身份验证的命名帐户
- 使用 OpenID 进行身份验证的命名帐户
- 匿名帐户使用 OpenID 进行身份验证
所有这些用户都存储在同一个表中,以简化为 cmets 表。命名帐户链接到该帐户可以管理的博客。匿名用户可以对博客上的文章发表评论,但他们无能为力。如果匿名用户注册了一个帐户,我想自动将该用户的旧 cmets 转移到指定帐户。我目前正在通过让用户填写具有唯一名称和有效电子邮件的表单来做到这一点。
目前,两组帐户都使用以下架构存储在同一个表中。 (是的,这是一个 Rails 迁移)
create_table :users do |t|
t.string :name #unique because it maps to a subdomain
t.string :openid_url #unique
t.string :email #unique
t.string :password_hash
t.string :password_salt
t.boolean :guest #Anonymous user flag
t.timestamps
end
(openid_url 是唯一的,以防止多个帐户附加到同一个 openid。email 是唯一的,因为用户使用电子邮件/密码登录)
我正在使用此设置,但在使用 Google 的 OpenID 实现时遇到了问题。每个使用 Google 获取 OpenID 的用户都有相同的 URL:https://www.google.com/accounts/o8/ud。
我如何支持使用 google 作为 openid 提供程序,因为它的 url 对于每个用户都不是唯一的? (请记住存在的约束)
注意:Google 帐户可以使用互联网上的任何有效电子邮件地址,因此我不能只将 person@google.com 存储在 openid_url 字段中,因为该电子邮件可能是 person@example.com 或更糟的是 person@yahoo.com!雅虎也使用这种单一的 url 方法,所以我也必须支持它们。
【问题讨论】:
-
为什么说电子邮件地址是唯一的?他们可能不是。如果您看到第二次 openid 登录并且用户声称与您已有的电子邮件地址相同,该怎么办?
-
电子邮件用于未使用 openid 的命名帐户。从那以后,我将我的应用程序更改为专门使用 openid。 (我认为有足够多的人拥有 google/yahoo 帐户,我对此不会有任何问题。)