2011-12-20 10 views
7

Birden fazla alt etki alanı olan bir ray uygulamasında devise gem kullanıyorum. Her alt alan şu şekilde görünecektir ilgili kontrol ünitesi tarafından işlenir: Giriş sayfasına kullanıcı yönlendirme yaparkenDevise + Subdomain - sign_in için kullanıcıyı yönlendirin

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

Yukarıdaki denetleyici uygulamayla, Devise hep alt alan tutun. Yukarıdaki durumda, Devise, ortak bir sign_in Url yerine http://subdomain1.acmesite/users/sign_in numaralı kullanıcıya yönlendirme yapar.

Bu, her bir alt etki için çok sayıda sign_in URL'ler sahip olur.

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

henüz alt alan url kısmını ve önceki sayfa url bilgisini tutmak dışlamak için vasiyetle yöntemini geçersiz kılmak mümkün olmadığını merak ediyorum. Daha da önemlisi, alt alandan bağımsız olarak ve başarılı kimlik doğrulamasından sonra, kullanıcının belirli bir URL'ye (örneğin: http://acmesite/users/sign_in) yeniden yönlendirilmesini istiyoruz. Devise, kullanıcıyı arayan alt etki alanı + sayfasına geri döndürmelidir.

cevap

-3

Projemde gelen mücevher tasarlamak droped ve yerine artık büyücülük kullanarak.

Büyücülük tam benim proje şartlarına uygun bana denetleyici ve görünümü üzerinde tam kontrol sağlamak. Bu geçişten sonra üretimde altı ay koşarak, Büyücülük mücevher ile mutluyum.

+0

Güzel bahşiş. Bunu deniyorum ... – alf

2

Kullanıcı doğrulanmamış olduğunda devreye giriyor özel bir FailureApp yazmak gerekir. Bir başlatılmamış sabit CustomFailure hata mesajı alıyorsanız,

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

ve koyduk: 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 

Ve eklemek itibaren

config/başlatıcıları/devise.rb aşağıdaki/lib dizini altında CustomFailure sınıfı gibi, application.rb dosyasında özdevinimli emin lib dosyaları yapmak altında

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