Аутентификация на основе токенов для API Rails JSON
Я делаю API в рельсах. Для обычной проверки подлинности мы используем devise, но в API, как реализовать устройство для аутентификации.
gem 'devise_token_auth'
Кто-то предпочитает этот камень для аутентификации, но для этого нет учебника.
Как реализовать аутентификацию в rails api?
Ответы
Ответ 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'
Остальные шаги приведены в его документации и довольно легко следовать.