这是一个数据库问题.我已经安装并运行了一个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.电子邮件是唯一的,因为用户使用电子邮件/密码登录)
我正在使用此设置我遇到了Google的OpenID实施问题.使用Google for OpenID的每个用户都具有相同的网址:https://www.google.com/accounts/o8/ud.
我如何支持使用谷歌作为openid提供商,因为它的网址并不是每个用户都是唯一的? (请记住存在的约束)
注意:Google帐户可以使用互联网上的任何有效电子邮件地址,因此我不能将person@google.com存储在openid_url字段中,因为电子邮件可能是person@example.com或更糟的是person@yahoo.com!雅虎也使用这种单一的网址方法,所以我也必须支持它们.