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
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
Pubblica la tua definizione find_for_facebook dal tuo modulo Utente. – xvidun
Questo è un bel tutorial: http://sreeharikmarar.blogspot.com/2013/01/omniauth-devise-authentication-using.html – duykhoa