0

我有一些奇怪的问题:如果我跑

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。我哪里错了?

4

2 回答 2

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
于 2013-11-14T20:14:51.147 回答
0

http_basic_authenticate_with是类方法,authenticate_incoming也是实例方法。你可以这样做self.class.http_basic_authenticate_with,但在before_filter. 你的目标是什么?也许我可以帮助你思考如何完成它。

于 2013-11-14T20:11:05.867 回答