2012-10-16 75 views
5

我們已經註冊和登錄通過Facebook使用rails,devise和omniauth。我們在Heroku上運行,運行兩個Web dynos。devise + omniauth Facebook:current_user無後sign_in

有時候用facebook登錄失敗。我們的應用和Facebook之間的實際握手行爲很好。實際上,在下面的代碼中,@user是一個實際的User模型實例,omniauth數據Hash包含來自FB的所有數據,sign_in似乎成功並設置了current_user。

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def facebook 
    @user = User.find_for_facebook(env["omniauth.auth"].extra.raw_info, current_user) 

    logger.info ">>>>>> OMNIAUTH FB BEGIN >>>>>>" 
    logger.info env["omniauth.auth"].inspect 
    logger.info "User is: #{@user.inspect}" 

    session["devise.facebook_data"] = request.env["omniauth.auth"].except("extra") 

    flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" 
    res = sign_in(:user, @user) 

    logger.info "Sign In Result: #{res.inspect}" 
    logger.info "CURRENT_USER: #{current_user.inspect}" 
    logger.info "<<<<<< OMNIAUTH FB END <<<<<<" 

    respond_to do |format| 
     format.json 
    end 
    end 
end 

客戶端確實對我們在成功登錄網站重定向(基於登錄上下文不同的動作)到另一個URL。在該URL處,我們檢查current_user ...但current_user返回nil。如果登錄過程重複執行幾次,最終會起作用。

我們是在

  • 的Rails 3.2
  • 設計2.1.2
  • Omniauth Facebook的1.4.0
  • 的Ruby 1.9.3 P194
+0

得到了一個非常類似的問題(在我的current_user總是零)。有人建議轉而僞造保護,請看看這裏:https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview#google – chrmod

+0

請從您的用戶模塊發佈您的find_for_facebook定義。 – xvidun

+0

這是一個很好的教程:http://sreeharikmarar.blogspot.com/2013/01/omniauth-devise-authentication-using.html – duykhoa

回答

-2

我不知道這是否真的是你所描述的解決方案,但我想知道這是否:

@user = User.find_for_facebook(ENV [ 「omniauth.auth」]。extra.raw_info,CURRENT_USER)

應爲這?

@user = User.find_for_facebook(request.env [ 「omniauth.auth」]。extra.raw_info,CURRENT_USER)

那是我的如何是反正。不真的相信這可以解釋爲什麼你的應用程序會隨意讓用戶登錄。

相關問題