2011-12-20 11 views
7

Estoy usando la gema de diseño en una aplicación de rieles con múltiples subdominios. Cada subdominio es manejado por el regulador respectivo, que se parece a esto:Devise + Subdominio - Redirigir usuario para sign_in

class Subdomain1Controller < ApplicationController 
    before_filter :authenticate_user! 
    def index 
    end 
end 

Con la implementación del controlador anterior, idearán mantener siempre subdominio, mientras que la reorientación de usuario a la página de acceso. En el caso anterior, idee redirigir usuario a http://subdomain1.acmesite/users/sign_in en lugar de una URL de sign_in común.

Esto lleva a tener varias URL de inicio de sesión para cada subdominio.

http://subdomain1.acmesite/users/sign_in 
http://subdomain2.acmesite/users/sign_in 
http://subdomain3.acmesite/users/sign_in 

Me pregunto si es posible reemplazar el método legado para excluir parte subdominio de la URL y todavía mantener la información URL de la página anterior. Más preciado, quiero que Devise redirija al usuario a una URL específica (como: http://acmesite/users/sign_in) independientemente del subdominio y después de una autenticación exitosa, Devise debe devolver al usuario a la página de subdominio + llamante.

Respuesta

-3

He descartado la gema Devise de mi proyecto y ahora uso Sorcery en su lugar.

Hechicería me proporcionan un control completo sobre el controlador y la vista, cumplen totalmente con los requisitos de mi proyecto. Con seis meses seguidos en la producción después de esta transición, estoy contento con la gema de Sorcery.

+0

Buen consejo. Estoy probando esto ... – alf

2

Necesita escribir una FailureApp personalizada que se activa cuando el usuario no está autenticado.

De How To: Redirect to a specific page when the user can not be authenticated

class CustomFailure < Devise::FailureApp 
    def redirect_url 
    #return super unless [:worker, :employer, :user].include?(scope) #make it specific to a scope 
    new_user_session_url(:subdomain => 'secure') 
    end 

    # You need to override respond to eliminate recall 
    def respond 
    if http_auth? 
     http_auth 
    else 
     redirect 
    end 
    end 
end 

y agregue el siguiente en config/inicializadores/devise.rb:

config.warden do |manager| 
    manager.failure_app = CustomFailure 
end 

Si usted está recibiendo un error CustomFailure constante sin inicializar, y que ha puesto el Clase CustomFailure en su directorio/lib, asegúrese de cargar automáticamente sus archivos lib en su archivo application.rb, como se detalla a continuación

config.autoload_paths += %W(#{config.root}/lib) 
Cuestiones relacionadas