пользовательская аутентификация с разработкой для API - PullRequest
0 голосов
/ 29 декабря 2011

поэтому у меня есть небольшая хитрая комбинация здесь

Company has many Users
User belongs to Company

Пользователь управляется для аутентификации с помощью devise

class User < ActiveRecord::Base

  belongs_to :company

  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

Вы можете войти в систему как пользователь и создать объекты, которые все принадлежатКомпания того, а не пользователя, например: Text.(company.texts)

Теперь я создал простой API, используя гем acts_as_api.для этого мне просто нужно изменить свой текстовый контроллер, например, действие show.

class TextsController < ApplicationController

  load_and_authorize_resource

  def show
    #@text = Text.find(params[:id])
    respond_to do |format|
      format.html
      format.json { render_for_api :texts_all, :json => @text }
    end

это прекрасно работает на веб-сайте.проблема в API.Я не хочу аутентифицироваться при доступе к API через модель пользователя.у компании есть атрибут с именем :hash, который я хочу использовать для аутентификации в API.

Я понятия не имею, как добиться этого с помощью устройства (или любого другого метода).поэтому по умолчанию devise хочет, чтобы пользователь вошел в систему из-за load_and_authorize_resource в моем контроллере, что хорошо для ответа html, но не для ответа json.

есть идеи?

спасибо зачитая это.пожалуйста, оставьте комментарий, если что-то неясно!

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Просто используйте Token Authenticatable и отправляйте токен с каждым запросом к вашему API.

Вот учебник для него.

0 голосов
/ 29 декабря 2011

Условно применяйте фильтры аутентификации на основе принятых заголовков формата:

# override in controllers related ot API
def authenticate_user!
  respond_to do |format|
    format.html { super } # just like before
    format.json { enforce_api_auth }
  end
end

Теперь вызовы API обеспечивают собственную аутентификацию.

...