2012-10-16 11 views
5

Abbiamo la registrazione e l'accesso tramite Facebook utilizzando rails, idea e omniauth. Siamo ospitati su Heroku, eseguendo due web dynos.devise + omniauth facebook: utente corrente nil dopo sign_in

a volte l'accesso con Facebook non riesce. La vera stretta di mano tra la nostra app e Facebook va bene. Infatti, nel codice qui sotto @user è un'istanza di modello utente reale, l'hash di dati omniauth contiene tutti i dati da FB, sign_in sembra avere successo E viene impostato l'utente corrente.

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 

Il lato client fa un redirect (diverse azioni in base al contesto di login) per un altro URL sul nostro sito al login di successo. A quell'URL, controlliamo current_user ... ma current_user sta restituendo nil. Se la procedura di accesso viene ripetuta un paio di volte, alla fine funziona.

Siamo sulla

  • Rails 3.2
  • Devise 2.1.2
  • Omniauth-facebook 1.4.0
  • Rubino 1.9.3 P194
+0

ha ottenuto un problema molto simile (nel mio l'utente corrente è sempre nullo). Alcune persone suggeriscono di disattivare la protezione dalla contraffazione, dai uno sguardo qui: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview#google – chrmod

+0

Pubblica la tua definizione find_for_facebook dal tuo modulo Utente. – xvidun

+0

Questo è un bel tutorial: http://sreeharikmarar.blogspot.com/2013/01/omniauth-devise-authentication-using.html – duykhoa

risposta

-2

non lo faccio sapere se questa è davvero la soluzione a quello che hai descritto, ma mi chiedo se questo:

@user = User.find_for_facebook (ENV [ "omniauth.auth"]. Extra.raw_info, current_user)

va letto come questo?

@user = User.find_for_facebook (request.env [ "omniauth.auth"]. Extra.raw_info, current_user)

è così che il mio è in ogni modo. Sicuramente questo spiegherebbe perché la tua app stia arbitrariamente permettendo all'utente di accedere comunque.