3

我正在開發一個Ruby on Rails的Web應用程序。我使用authlogic進行身份驗證。我的網站有自己的登錄,但我希望也可以使用Facebook。我嘗試了authlogic_facebook_connect(使用Facebooker)。在很多打嗝後(文檔還沒有完全保留),我確實獲得了authlogic_facebook_connect的工作,並沒有問題。當我遇到以前從未使用過網站的用戶時,默認的「連接」行爲可以很好地工作,但這會導致爲Facebook和我的網站使用不同電子郵件地址的人員進行大量重複登錄。這就是我想要的:Ruby on Rails:Authlogic Facebook集成:鏈接帳戶與用戶輸入,而不是自動使用電子郵件地址

當用戶點擊Facebook的「連接」按鈕(並且在他們通過點擊'允許'的Facebook身份驗證步驟後),我想要一個框彈出詢問用戶是否他們想要連接到我的網站上的預先存在的帳戶,或者他們想要爲他們自動生成一個帳戶。

如果他們想爲它們自動生成,我們很好,我們照常進行,但如果 - 另一方面,他們想要將他們的Facebook帳戶鏈接到我的網站上的帳戶,我真的想要他們輸入他們的本地憑證並找到正確的帳戶。換句話說,我不要希望我的解決方案自動找出哪個帳戶看起來像是正確的,我希望用戶這樣做。

是否有任何gem/plugin /快速入侵,這將允許我使用authlogic_facebook_connect或OAuth或其他方法來解決這個問題?

--David

回答

3

別人也許能在這個完美的寶石指向你,但我可以告訴你,我已經在類似的問題的工作,這是沒有太多的工作要擼起自己的,基於oauth2寶石。

下面是我使用的代碼/流程的草圖。

1)用戶點擊「連接到Facebook」,這就會進入一個動作這樣

def to_facebook 
    options = { 
     :redirect_uri => facebook_callback_url, 
     :scope => "email,publish_stream" # whatever you want to do 
    } 
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE) 

    redirect_to client.web_server.authorize_url(options) 
end 

2)用戶去到Facebook和給你所有你想要的訪問,那麼Facebook將調用回調指定facebook_callback_url這應該帶你到一個這樣的動作:

def facebook_callback 
    client = OAuth2::Client.new(FACEBOOK_API_KEY, FACEBOOK_API_SECRET, :site => FACEBOOK_API_SITE) 
    access_token = client.web_server.get_access_token(params[:code], :redirect_uri => facebook_callback_url) 

    do_my_custom_user_association(access_token) 
end 

然後你可以指定任何你在do_my_custom_user_association想,你應該有一個current_user從authlogic如果有人登錄因此您可以重定向到允許登錄用戶選擇是否要合併到當前帳戶或其他帳戶的流。如果沒有當前用戶,您可以將它們發送到創建帳戶流程,附帶一些Facebook數據。

請注意,這只是一個小品,也有錯誤的情況來處理(例如facebook_callback將與帕拉姆error_reason被擊中如果get_acccess_token失敗),我不建議你這樣做就在你的控制器中的所有的oauth2互動,但基本的想法就在那裏。

請參閱http://developers.facebook.com/docs/authentication/如果任何oauth2交互沒有意義。

+0

優秀。這是完美的。非常感謝。你知道是否存在訪問令牌以便在會話的後續重用它? – DavidH 2010-12-23 01:40:36

相關問題