web-dev-qa-db-fra.com

Authentification basée sur des jetons pour Rails API JSON

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?

18
user5496955

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

17

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.

17
rdupz

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
4
Artem Biserov

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.

2
Jagjot