2015-06-26 3 views
4

Я пытаюсь использовать Devise для аутентификации API на стороне сервера. В мой контроллер, я использую код прямо из вики DEViSE для того, как использовать HTTP базовой аутентификации ...Неопределенный метод 'authenticate_with_http_basic' в Rails 4.2

before_filter :check_auth, only: [:show] 

и

def check_auth 
    authenticate_or_request_with_http_basic do |username,password| 
     resource = User.find_by_email(username) 
     if resource.valid_password?(password) 
     sign_in :user, resource 
     end 
    end 
    end 

Когда я иду к намеченной URL, я ожидать ошибки 401 Несанкционированное JSON, однако, вместо этого я получаю следующее сообщение об ошибке:

undefined method `authenticate_or_request_with_http_basic' for #<V1::ItemsController:0x007fb6b3d79120> 

Я не понимаю, почему этот метод не будет определен. Я использую RubyMine и ссылки IDE прямо к коду для этого метода, но по какой-то причине что-то не так. Может ли кто-нибудь помочь мне выяснить, что я делаю неправильно?

ОБНОВЛЕНИЕ: Я смог идентифицировать свою проблему. Я использую Rails-API против полных Rails, поэтому модуль для HttpAuthentication (на удивление) не включен.

Добавляя:

include ActionController::HttpAuthentication::Basic::ControllerMethods 

к моему ApplicationController, он теперь работает как задумано.

ответ

4

Это потому, что Rails API является подмножеством базовой библиотеки Rails и по умолчанию не включает модули для обработки метода authenticate_with_http_basic. Вам нужно будет включить эти модули в ваш application_controller.rb.

приложение/контроллеры/application_controller.rb

include ActionController::HttpAuthentication::Basic::ControllerMethods 
include ActionController::HttpAuthentication::Token::ControllerMethods