2012-05-10 16 views
6

Ho iniziato a integrare l'autenticazione di Facebook nel mio sito Rails 3.1, ma ho riscontrato un problema quando faccio clic sul pulsante Annulla nella finestra di dialogo fb auth. Quando faccio clic su Annulla, vengono reindirizzati al mio sito su/auth/facebook/callback e quindi reindirizzati alla pagina/login (sto usando Devise).Pulsante Annulla Omniauth-facebook

Quello che voglio fare è reindirizzare un'autorizzazione annullata a una pagina che consente all'utente di creare un account in modo standard (email, nome utente, password, ecc.). Come posso sovrascrivere il reindirizzamento sulla pagina/login?

Btw, sto usando la gemma omniauth-facebook.

Grazie!

risposta

0

penso che si potrebbe essere in grado di ignorare l'impostazione predefinita on_failure comportamento nella configurazione omniauth, non sto usando concepire, ma sto usando la gemma omniauth-facebook e hanno avuto successo con variazioni sul:

OmniAuth.config.on_failure = Proc.new { |env| 
    OmniAuth::FailureEndpoint.new(env).redirect_to_failure 
} 

o qualcosa di più personalizzato come:

OmniAuth.config.on_failure do |env| 
    new_path = "#{env['SCRIPT_NAME']}#{OmniAuth.config.path_prefix}/failure?message=#{error_type}" 

    [302, {'Location' => new_path, 'Content-Type'=> 'text/html'}, []] 
end 
3

Aggiungi metodo di fallimento nel vostro controller callback omniauth e definire il comportamento personalizzato.

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

    if @user.persisted? 
     sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated 
     set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? 
    else 
     session["devise.facebook_data"] = request.env["omniauth.auth"] 
     redirect_to new_user_registration_url 
    end 
    end 

    def failure 
    redirect_to root_path // here 
    end 

end 
+0

Come hai scoperto quell'azione "fallimento"? Ha funzionato perfettamente per me. Ma non ho trovato la documentazione adeguata per questo problema, che è una parte fastidiosa per la gemma Devise (OmniAuth). – Jonauz

+2

Ho controllato il registro di sviluppo delle rotaie e ho scoperto che escogitare il metodo di errore delle chiamate quando oauth non riesce. così ho fatto il mio. – synthresin

Problemi correlati