2012-05-10 20 views
6

Comencé a integrar la autenticación de Facebook en mi sitio de Rails 3.1, pero me encontré con un problema cuando hago clic en el botón cancelar en el cuadro de diálogo f auth. Cuando hago clic en cancelar, me redirigen a mi sitio en/auth/facebook/callback y luego me redirigen a la página/login (estoy usando Devise).Omniauth-facebook botón de cancelación

Lo que quiero hacer es redirigir una autenticación cancelada a una página que permite al usuario crear una cuenta de la manera estándar (correo electrónico, nombre de usuario, contraseña, etc.). ¿Cómo puedo anular el redireccionamiento a la página/login?

Btw, estoy usando la joya omniauth-facebook.

Gracias!

Respuesta

0

creo que puede ser capaz de sustituir el valor predeterminado on_failure comportamiento en su configuración OmniAuth, no estoy usando idear, pero estoy usando la gema OmniAuth-facebook y han tenido éxito con variaciones en:

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

o algo más personalizado como:

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

Agregar método falla en su controlador de devolución de llamada OmniAuth y definir su comportamiento personalizado.

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

¿Cómo descubrió que la acción "fracaso"? Funcionó perfectamente para mí. Pero no he encontrado la documentación adecuada para tal problema, que es una parte molesta para la gema Devise (OmniAuth). – Jonauz

+2

Comprobé el registro de desarrollo de rieles y descubrí que idear el método de falla de llamadas cuando falla oauth. así que hice mi propio. – synthresin

Cuestiones relacionadas