Je fais de l'API dans Rails. Pour l'authentification normale, nous utilisons devise mais dans l'API comment implémenter la conception pour l'authentification.
gem 'devise_token_auth'
Quelqu'un préfère ce bijou pour l'authentification mais il n'y a pas de tutoriel disponible pour cela. Comment implémenter l'authenitication dans Rails api?
Voici un bon tutoriel sur authentification API avec devise_token_auth . De plus, la page github du devise_token_auth gem semble avoir une très bonne documentation qui devrait vous aider à démarrer.
Si vous cherchez un bon tutoriel pour comprendre les concepts associés, en voici un qui a une procédure pas à pas complète de création d'une API Rails avec authentification basée sur des jetons (Non en utilisant devise_token_auth
, mais utile pour comprendre les concepts).
Je vous recommande également de jeter un œil à JWT (JSON Web Token) qui fonctionne très bien avec une grande échelle Rails API. Voici un autre tutoriel qui explique comment build Rails API Backed With JWT
La meilleure chose que vous puissiez faire est de suivre les tutoriels github qui sont les plus susceptibles d'être à jour.
Vous devez d'abord suivre la partie TLDR .
Notez que les développeurs frontend doivent connaître la spécification d'utilisation .
Enfin, vous voulez parcourir la documentation. Voici quelques exemples qui pourraient vous aider:
Itinéraires
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
Un contrôleur :
module Api
class StuffsController < ApiController
before_action :authenticate_user!
...
end
end
Contrôleur API
class ApiController < ApplicationController
include DeviseTokenAuth::Concerns::SetUserByToken
end
Modèle utilisateur
class User < ActiveRecord::Base
# Include default devise modules.
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
include DeviseTokenAuth::Concerns::User
end
Enfin n'oubliez pas de configurer la gemme dans l'initialiseur correspondant.
Vous pouvez ajouter des attributs "authentication_token" à votre table et utiliser cette gemme:
https://github.com/robertomiranda/has_secure_token
dans 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
Dans mon projet actuel, j'ai implémenté simple_token_authentication . Il est également assez facile à mettre en œuvre et à utiliser.
Ajoutez simplement ce qui suit à votre Gemfile et exécutez bundle install
gem 'simple_token_authentication', '1.12.0'
Reste que toutes les étapes sont données dans sa documentation et assez faciles à suivre aussi.