我有一些奇怪的问题:如果我跑
class ApplicationController < ActionController::Base
http_basic_authenticate_with name: "test", password: "test"
它工作正常。但是,如果我把这个
before_filter authenticate_incoming
def authenticate_incoming
http_basic_authenticate_with name: "hi", password: "ho"
end
我得到undefined method http_basic_authenticate_with
。我哪里错了?
答案 0 :(得分:2)
http_basic_authenticate_with
的源代码是
def http_basic_authenticate_with(options = {})
before_filter(options.except(:name, :password, :realm)) do
authenticate_or_request_with_http_basic(options[:realm] || "Application") do |name, password|
name == options[:name] && password == options[:password]
end
end
end
所以你看到它正在实施before_filer
。所以你应该做的就是使用类似的东西(你也可以存储一些session
登录数据;))
def authenticate_incoming
authenticate_or_request_with_http_basic do |name, password|
if name == 'hi' && password == 'ho'
session[:logged_in] = true
return true
else
return false
end
end
end
答案 1 :(得分:0)
http_basic_authenticate_with
是一种类方法,authenticate_incoming
是一种实例方法。你可以做self.class.http_basic_authenticate_with
,但这在before_filter
中没有多大意义。你的目标是什么?也许我可以帮助你思考如何完成它。