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

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

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

gem 'devise_token_auth'

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

4b9b3361

Ответ 1

Лучшее, что вы можете сделать, это следовать учебникам 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

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

Ответ 2

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

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

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

Ответ 3

Вы можете добавить в таблицу атрибуты "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

Ответ 4

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

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

gem 'simple_token_authentication', '1.12.0'

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