这是一个数据库问题。我有一个已经安装并正在运行的openid库。在数据库中存储OpenID信息
我想在我正在使用的网站上使用OpenID。有三种类型的用户。
- 使用电子邮件/密码使用OpenID使用OpenID认证
- 匿名帐户验证
- 命名帐户命名帐户验证
所有这些用户都存储在同一个表中简单地评论表。已命名的帐户链接到该帐户可以管理的博客。匿名用户可以评论博客上的文章,但他们无法做任何其他事情。如果匿名用户注册一个帐户,我想自动将该用户的旧评论转移到指定的帐户。我目前正在通过让用户填写具有唯一名称和有效电子邮件的表单来做到这一点。
当前两组帐户使用以下模式存储在同一个表中。 (是的,它是一个轨道迁移)
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 for OpenID的用户都有相同的网址:https://www.google.com/accounts/o8/ud。
如何支持将Google作为openid提供商使用,因为它对于每个用户来说都不是唯一的? (请记住存在的限制)
注意:Google帐户可以使用互联网上的任何有效电子邮件地址,因此我不能只将[email protected]存储在openid_url字段中,因为电子邮件可能是person @ example。 com或更糟糕的[email protected]!雅虎也使用这种单一的URL方法,所以我也必须支持他们。
你为什么说电子邮件地址是唯一的?他们可能不是。如果您看到第二个openid登录并且用户声明与您已拥有的电子邮件地址相同的电子邮件地址,该怎么办? – 2009-10-08 15:46:17
电子邮件是用于不使用openid的指定帐户。我已经改变了我的应用程序专门使用openid。 (我认为足够的人有谷歌/雅虎帐户,我不会有这个问题。) – epochwolf 2009-10-08 18:32:44