базовая авторизация с rails-api

Я уверен, что здесь я делаю что-то не так, но вот как выглядит мой контроллер приложений:

class ApplicationController < ActionController::API                                                                                                                                                                                                        
  include ActionController::HttpAuthentication::Basic                                                                                                                                                                                                      
  include ActionController::MimeResponds                                                                                                                                                                                                                   

  http_basic_authenticate_with :name => "joeyjojo", :password => "shabadoo"
end

Я не могу понять, почему мой http_basic_authenticate_with выдает эту ошибку:

undefined method `http_basic_authenticate_with' for ApplicationController:Class

Я уверен, что это что-то простое, но я этого не вижу. MimeResponds отлично работает в других контроллерах.


person thatmiddleway    schedule 03.05.2012    source источник
comment
Почему вы унаследовали applicationcontroller от actioncontroller::api?   -  person Mikhail Nikalyukin    schedule 03.05.2012
comment
Для этого используется гем rails-api.   -  person thatmiddleway    schedule 03.05.2012


Ответы (2)


Вместо этого вы должны включить ActionController::HttpAuthentication::Basic::ControllerMethods, чтобы иметь доступные методы. Вот модуль в ActionController::Base

person Carlos Antonio    schedule 03.05.2012
comment
Карлос, спасибо, но если я включу class ApplicationController ‹ ActionController::Base, include ActionController::HttpAuthentication::Basic::ControllerMethods, то все мои маршруты внезапно выдадут No route match... Я делаю включение неправильно? - person shacker; 10.02.2013

Если у вас есть Rails API, добавьте это в свой контроллер:

включить ActionController::HttpAuthentication::Basic::ControllerMethods

class YourController < ApplicationController

  include ActionController::HttpAuthentication::Basic::ControllerMethods
  http_basic_authenticate_with name: "username", password: "passwd123"

Я использую Rails 4.2.4 и свой ApplicationController:

class ApplicationController < ActionController::API
person Fergara    schedule 09.05.2016
comment
Спасибо! Вы спасли мой день. Откуда разработчик должен это знать? Я не мог найти ничего об этом в документации Ruby - person DataGreed; 24.06.2019