在Authlogic中,有沒有一種方法可以向身份驗證方法添加條件?我知道通過使用find_by_login_method我可以指定另一種方法來使用,但是當我使用這個我需要傳遞另一個參數,因爲find_by_login_method方法只傳遞被認爲是'login_field'的參數。Rails Authlogic身份驗證方法
我需要做的是檢查的東西,是地道的模型的關聯。這裏是我想用
# make sure that the user has access to the subdomain that they are
# attempting to login to, subdomains are company names
def self.find_by_email_and_company(email, company)
user = User.find_by_email(email)
companies = []
user.brands.each do |b|
companies << b.company.id
end
user && companies.include?(company)
end
的方法,但這種失敗,因爲事實上只有一個參數發送到find_by_email_and_company方法。
該公司實際上是子域,所以爲了得到它在這裏,我只是把它放在一個隱藏字段的形式(只有這樣我能想到得到它的模型)
是否有方法我可以重寫......?
使用下面我想出了工作如下答案:
用戶模型(User.rb)
def self.find_by_email_within_company(email)
# find the user
user = self.find_by_email(email)
# no need to continue if the email address is invalid
return false if user.nil?
# collect the subdomains the provided user has access to
company_subdomains = user.brands.map(&:company).map(&:subdomain)
# verify that the user has access to the current subdomain
company_subdomains.include?(Thread.current[:current_subdomain]) && user
end
應用控制器
before_filter :set_subdomain
private
def set_subdomain
# helper that retreives the current subdomain
get_company
Thread.current[:current_subdomain] = @company.subdomain
end
find_by_login_method :find_by_email_within_company
我讀過有關使用Thread.current和衝突的命名空間的幾件事用戶會話模型(UserSession.rb)..這是爲我工作,但我非常賞金到期前聽到任何其他建議,否則一個很好的解決方案,以+100延Fahnenbruck :)
您需要將「user && companies.include?(company)」換成「companies.include?(company)&& user」,因此User#find_by_email_and_company返回用戶模型而不是「true」或「false」陣列#包括哪些內容?方法 – jigfox 2010-04-26 19:12:22
您對Thread.current可能有問題的權利。所以我用另一種方式更新了我的答案 – jigfox 2010-04-26 21:25:08
多數民衆贊成在有趣的是,您鏈接到的帖子是我讀的帖子通知我Thread.current是不好的,感謝Jens的幫助! – Rabbott 2010-04-26 22:23:17