3
我不確定這個問題是否是普遍的Rails問題或者是特定的Redmine。在Redmine的插件中通過alias_method_chain封裝類方法
有一個類的用戶,它有一個類方法try_to_login。我編寫了一個包含method_alias_chain的模塊來包裝該方法並提供其他功能。如果我進入控制檯並調用try_to_login,這工作正常。我的包裝將被執行,一切都很好。但是,當我在服務器上運行這個時,只調用了vanilla方法。包裝是從來沒有碰過。我向香草方法中添加了一個記錄器命令,以確保它被調用。
下面是代碼的簡化版本:
require_dependency 'principal'
require_dependency 'user'
require 'login_attempt_count'
module UserLoginAttemptLimiterPatch
def self.included(base)
base.extend ClassMethods
base.class_eval do
class << self
alias_method_chain :try_to_login, :attempt_limit
end
end
end
module ClassMethods
def try_to_login_with_attempt_limit(login, password)
user = try_to_login_without_attempt_limit login, password
#stuff here gets called via console but not via browser
user
end
def authentication_failed(login)
#important code here
end
end
end
User.send(:include, UserLoginAttemptLimiterPatch)
另外被當該插件被載入需要這個模塊。
非常感謝你,這是非常有幫助!在你的代碼 看着 http://github.com/edavis10/redmine_extra_ldap/blob/707df49063c0ffe67c9a8035920a7e2b75b04dd0/init.rb 和http://github.com/edavis10/redmine_extra_ldap/blob/707df49063c0ffe67c9a8035920a7e2b75b04dd0/lib/redmine_extra_ldap/patches/ auth_source_ldap_patch.rb 使解決問題變得簡單! 你是搖滾男人! – ajmurmann 2010-02-17 22:46:47