2012-01-13 17 views
6

Estoy usando omniauth sin diseñar para autenticación, ya que me gusta su simplicidad. Además de omniauth-facebook, uso omniauth-identity para ofrecer email/pw-authentication.
El railscast on omniauth-identity describe cómo configurar una página de registro e inicio de sesión personalizada. Pero las rutas predeterminadas suministradas por la identidad (/ auth/identity y/auth/identity/register) aún están accesibles.anula "/ auth/identity" -página de omniauth identity

Me gustaría tener estos bajo mi control, ya que solo quiero permitir que los usuarios invitados se registren. ¿Hay alguna manera de anular esas rutas suministradas por un middleware de rack?
Intentando simplemente

match "/auth/identity", to: "somewhere#else" 

no hacer el truco!

¿Existe alguna configuración para desactivar estas rutas predeterminadas? La documentación no proporciona ningún detalle sobre esto ...

Lamentablemente, soy bastante nuevo en Rack, por lo que aún no tengo suficiente información para resolver este problema por mi cuenta.
¡Estaría encantado de que alguien me señale la dirección correcta!

+0

Al final me acaba de dar a los usuarios invitados una frase de paso, por lo que en realidad no importaba, que no era el sitio identidad original sigue siendo accesible ... – wdspkr

Respuesta

6

Un objeto de estrategia OmniAuth tiene un método request_phase que genera un formulario html y se lo muestra al usuario. Para la estrategia "omniauth-identity" esta sería la forma que ves en /auth/identity url.

Puede anular el método request_phase y reemplazar el generador de formularios con, por ejemplo, un redireccionamiento a su página de inicio de sesión personalizada (suponiendo que lo tenga disponible en /login url). Coloque el siguiente junto con su código de inicialización OmniAuth:

module OmniAuth 
    module Strategies 
    class Identity 
    def request_phase 
     redirect '/login' 
    end 
    end 
end 
end 

# Your OmniAuth::Builder configuration goes here... 
+0

Si desea anular la fase de solicitud, entonces' Probablemente quiera hacer lo mismo con 'registration_phase' también, y asegurarse de que la opción' registration_path' esté * no * establecida. – iain

+0

+1 Gracias por este – Trip

4

Además de 1gors y iains respuesta:

"/ auth/identidad/Registro" se sirve con obtener, así, para anular, que tenía que :

class OmniAuth::Strategies::Identity 
    alias :original_other_phase :other_phase 
    def other_phase 
    if on_registration_path? && request.get? 
     redirect '/sign_up' 
    else 
     original_other_phase 
    end 
    end 
end 
+0

+1 He añadido esto a '/ config/initializers/omniauth.rb' en el bloque' Rails.application.config.middleware.use OmniAuth :: Builder do ... end', junto con @ 1gors respuesta. Gracias: o) – Andrew

1

puede configurar el método de omniauth.rb

:on_login => SessionsController.action(:new) 

por ejemplo:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :identity, 
      :fields => [:nickname], 
      :on_login => SessionsController.action(:new), 
      :on_registration => UsersController.action(:new), 
      :on_failed_registration => SessionsController.action(:registration_failure) 
end 
Cuestiones relacionadas