Подтвердить что ты не робот

Определение аутентификации API

Я работаю над веб-приложением rails, которое также предоставляет API на основе JSON для мобильных устройств. Ожидается, что мобильные клиенты сначала получат токен с (email/pass), затем клиенты будут выполнять последующие вызовы API с токеном.

Я новичок в Devise, и я ищу Devise API, похожий на authenticate(email, pass) и ожидаю, что он вернет true/false, затем на основании этого я либо создам и верну токен, либо верну сообщение об отказе, но кажется, что Devise не предоставляет что-то подобное.

Я знаю, что Devise 1.3 обеспечивает аутентификацию на основе JSON, но это немного отличается от того, что мне нужно - мне нужно сгенерировать токен и обработать его обратно клиенту, а затем, после того как аутентификация будет выполнена, с использованием токена.

Может кто-нибудь, пожалуйста, дать несколько указателей?

4b9b3361

Ответ 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'