2

我正在尝试创建一个非常基本的身份验证器,但不幸的是我得到了 nil 作为回报,导致我的路由到 401,因为它未经授权。

[20] pry(#<API::UsersController>)> 
ActionController::HttpAuthentication::Token::ControllerMethods.authenticate_with_http_token
NoMethodError: undefined method `authenticate_with_http_token' for     
ActionController::HttpAuthentication::Token::ControllerMethods:Module

[22] pry(#<API::UsersController>)> cd    
ActionController::HttpAuthentication::Token::ControllerMethods

[23] pry(#<Module>):1> ls
ActionController::HttpAuthentication::Token::ControllerMethods#methods:
authenticate_or_request_with_http_token  authenticate_with_http_token      
request_http_token_authentication
locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_

[24] pry(#<Module>):1>

代码:

protected
  def authenticate
    authenticate_token || render_unauthorized
  end

  def authenticate_token
    binding.pry
    authenticate_with_http_token do |token, options|
      User.find_by(auth_token: token)
    end
  end

  def render_unauthorized
    self.headers['WWW-Authenticate'] = 'Token realm="Application"'
    render json: 'Bad credentials', status: 401
  end  
4

1 回答 1

2

似乎您API::UsersController(或您的ApplicationController)需要:

include ActionController::HttpAuthentication::Token::ControllerMethods
于 2015-03-03T22:54:25.703 回答