Аутентификация на основе токенов для API Rails JSON

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

gem 'devise_token_auth'

Кто-то предпочитает этот гем для аутентификации, но для этого нет учебника. Как реализовать аутентификацию в API рельсов?


person Community    schedule 06.11.2015    source источник
comment
Это вопрос, который я публикую, но переполнение стека деактивирует мою учетную запись :(   -  person    schedule 02.05.2016


Ответы (4)


Лучшее, что вы можете сделать, это следовать руководствам github, которые, скорее всего, будут актуальными. свидание.

Сначала вы должны следовать части TLDR.
Обратите внимание, что разработчики внешнего интерфейса должны знать о спецификация использования.
Наконец, вы хотите просмотреть документацию. Вот несколько примеров, которые могут помочь:

Маршруты

Rails.application.routes.draw do

  # Stuff
  devise_for :admin_users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)
  devise_for :users
  root to: "home#index"

  # The API part
  namespace :api, defaults: {format: :json} do
    scope :v1 do
      mount_devise_token_auth_for 'User', at: 'auth', skip: [:omniauth_callbacks]
      resources :stuff, only: [:index, :show]
    end
  end
end

Контроллер:

module Api
  class StuffsController < ApiController
    before_action :authenticate_user!
    ...
  end
end

Контроллер API

class ApiController < ApplicationController
  include DeviseTokenAuth::Concerns::SetUserByToken
end

Модель пользователя

class User < ActiveRecord::Base
  # Include default devise modules.
  devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :trackable, :validatable
  include DeviseTokenAuth::Concerns::User
end

Наконец, не забудьте настроить гем в соответствующем инициализаторе.

person rdupz    schedule 06.04.2016

Вот хорошее руководство по аутентификации API с помощью devise_token_auth. . Кроме того, на странице github gem-пакета devise_token_auth имеется очень хорошая документация, которая должна помочь вам начать работу.

Если вы ищете хороший учебник для понимания связанных концепций, вот один, в котором есть подробное пошаговое руководство по созданию Rails API с аутентификацией на основе токенов (не используется devise_token_auth, но полезно для понимания концепций).

Я также рекомендую вам взглянуть на JWT (веб-токен JSON), который работает очень хорошо. с крупномасштабным API Rails. Вот еще одно руководство, в котором объясняется, как создать Rails API. Поддержка JWT

person K M Rakibul Islam    schedule 06.11.2015

Вы можете добавить в свою таблицу атрибуты «authentication_token» и использовать этот гем:

https://github.com/robertomiranda/has_secure_token

в application_controller:

def authenticate_user!
  authenticate_user_from_token!
  super
end


def authenticate_user_from_token!
  User.find_by_authentication_token(user_token)
end

def user_token
  request.headers['X-AUTH-TOKEN'].presence || params['auth_token'].presence
end

person Artem Biserov    schedule 06.04.2016
comment
Ваше решение абсолютно спасло меня! Всего одна простая модификация для authentication_user! Мне пришлось изменить возвращаемое значение на authentication_user_from_token! || супер - person mike.adc; 22.02.2017
comment
Это было очень просто, и каждый, кажется, имел в виду больше драгоценных камней. Даже документы по разработке не просто объясняют, как я могу авторизоваться. Спасибо! - person thevikas; 18.11.2018

В моем текущем проекте я реализовал simple_token_authentication. Это довольно легко реализовать и использовать.

Просто добавьте следующее в свой Gemfile и запустите bundle install

gem 'simple_token_authentication', '1.12.0'

Все остальные шаги приведены в его документации, и им довольно легко следовать.

person Jagjot    schedule 09.04.2016