我正在玩Rayan Bates http://railscasts.com/episodes/170-openid-with-authlogic來源爲基礎。因此,我爲OpenID提供商創建了幾個圖標,例如Google,Yandex,OpenID,用戶必須選擇使用哪一個(在此類似於stackoverflow)。所以一切都很好。現在我決定只進行一次點擊登錄或註冊:當用戶點擊圖標Authlogic必須創建新用戶並對其進行身份驗證時,或者,如果用戶存在,只需對其進行身份驗證即可。所以我綁改變用戶#邏輯創建:Authlogic和OpenID註冊和登錄在一個動作
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
@user.save do |result|
if result
redirect_to root_url
else
@user_session = UserSession.new(:openid_identifier => @user.openid_identifier)
@user_session.save
redirect_to root_url
end
end
end
end
所以,如果用戶不能保存Authlogic將嘗試驗證他(當然,用戶不能保存,不僅是否存在另一個用戶與相同的openid_identifier,但只是例如)。但是這些方案是行不通的。在這種情況下什麼也沒有發生,@user_session.save
什麼也沒有返回。
UPD
展望Shripadķ鏈接源(http://github.com/shripadk/authlogic_openid_selector_example/blob/master/app/models/user_session.rb)我已經搭上了這一點:
class UserSession < Authlogic::Session::Base
auto_register
end
auto_register
是我所需要的
看起來很有趣。去看看 – fl00r 2010-07-18 08:32:18
好吧,我明白了:UserSession模型中的'auto_register'就足夠了! – fl00r 2010-07-18 09:03:04
'auto_register'中存在一個錯誤。事實上,我已經用提交來修補我的應用程序。看看最新的提交。當你使用auto_register而不使用補丁時,它不會從open-id提供程序返回電子郵件地址(或任何sreg/ax)! – 2010-07-18 11:10:44