這是一個數據庫問題。我有一個已經安裝並正在運行的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