Определение аутентификации API
Я работаю над веб-приложением rails, которое также предоставляет API на основе JSON для мобильных устройств. Ожидается, что мобильные клиенты сначала получат токен с (email/pass), затем клиенты будут выполнять последующие вызовы API с токеном.
Я новичок в Devise, и я ищу Devise API, похожий на authenticate(email, pass)
и ожидаю, что он вернет true/false, затем на основании этого я либо создам и верну токен, либо верну сообщение об отказе, но кажется, что Devise не предоставляет что-то подобное.
Я знаю, что Devise 1.3 обеспечивает аутентификацию на основе JSON, но это немного отличается от того, что мне нужно - мне нужно сгенерировать токен и обработать его обратно клиенту, а затем, после того как аутентификация будет выполнена, с использованием токена.
Может кто-нибудь, пожалуйста, дать несколько указателей?
Ответы
Ответ 1
Существует конфигурация устройства под названием :token_authenticatable
. Так что, если вы добавите это к методу devise в своем "пользователе", то вы можете аутентифицироваться в своем API, просто вызвав
"/api/v1/recipes?qs=sweet&auth_token=[@user.auth_token]"
Вы, вероятно, захотите это и для своего пользователя:
before_save :ensure_authentication_token
ОБНОВЛЕНИЕ (с кодом авторизации API)
Метод, который вы ищете:
resource = User.find_for_database_authentication(:login=>params[:user_login][:login])
resource.valid_password?(params[:user_login][:password])
здесь моя суть с полномасштабным входом в систему JSON/API с помощью devise
Ответ 2
Я бы рекомендовал прочитать Devise Wiki, так как Devise изначально поддерживает аутентификацию токена в качестве одного из его модулей. Я лично не работал с маркерной аутентификацией в Devise, но у Brandon Martin есть пример примера проверки токена здесь.
Ответ 3
Разработчик основан на Warden, промежуточном программном обеспечении аутентификации для Rack.
Если вам нужно реализовать свой (альтернативный) способ аутентификации пользователя, вы должны взглянуть на Warden в сочетании со стратегиями, которые поставляются с Devise: https://github.com/plataformatec/devise/tree/master/lib/devise/strategies
Ответ 4
Если токен auth просто не то, что вы хотите сделать, вы также можете вернуть куки файл и включить клиентский файл в файл заголовка запроса. Он очень похож на контроллер веб-сессий.
В интерфейсе API-интерфейсов
class Api::V1::SessionsController < Devise::SessionsController
skip_before_action :authenticate_user!
skip_before_action :verify_authenticity_token
def create
warden.authenticate!(:scope => :user)
render :json => current_user
end
end
В маршрутах
namespace :api, :defaults => { :format => 'json' } do
namespace :v1 do
resource :account, :only => :show
devise_scope :user do
post :sessions, :to => 'sessions#create'
delete :session, :to => 'sessions#destroy'
end
end
end
Тогда вы можете делать такие вещи (примеры используют HTTPie)
http -f POST localhost:3000/api/v1/sessions user[email][email protected] user[password]=passw0rd
Заголовки ответов будут иметь сеанс в заголовке Set-Cookie. Поместите это значение в последующие запросы.
http localhost:3000/api/v1/restricted_things/1 'Cookie:_my_site_session=<sessionstring>; path=/; HttpOnly'