Ruby on Rails
Authentifier Api en utilisant Devise
Recherche…
Introduction
Devise est une solution d'authentification pour Rails. Avant d'aller plus loin, j'aimerais ajouter une note rapide sur l'API. Donc, l'API ne gère pas les sessions (sans état), ce qui signifie une réponse après votre demande, et ne nécessite alors aucune attention supplémentaire, ce qui signifie qu'aucun état antérieur ou futur n'est requis pour que le système fonctionne transmettre les détails d'authentification à toutes les API et indiquer à Devise de ne pas stocker les détails de l'authentification.
Commencer
Nous allons donc d'abord créer un projet de rails et un dispositif de configuration
créer une application de rails
rails new devise_example
Maintenant, ajoutez le concept à la liste de gemme
vous pouvez trouver un fichier nommé 'Gemfile' à la racine du projet rails
Puis lancez l’ bundle install
Ensuite, vous devez lancer le générateur:
rails generate devise:install
Maintenant, sur la console, vous pouvez trouver quelques instructions juste suivre.
Générer un modèle de modèle
rails generate devise MODEL
Puis lancez rake db:migrate
Pour plus de détails, allez à: Devise Gem
Jeton d'authentification
Le jeton d'authentification est utilisé pour authentifier un utilisateur avec un jeton unique. Avant de procéder à la logique, nous devons d'abord ajouter le champ auth_token
à un modèle Devise.
Par conséquent,
rails g migration add_authentication_token_to_users
class AddAuthenticationTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :auth_token, :string, default: ""
add_index :users, :auth_token, unique: true
end
end
Puis lancez rake db:migrate
Maintenant, nous sommes tous prêts à faire de l'authentification avec auth_token
Dans app/controllers/application_controllers.rb
Tout d'abord cette ligne à elle
respond_to :html, :json
cela aidera l'application rails à répondre avec à la fois HTML et json
alors
protect_from_forgery with: :null
va changer ceci :null
car nous ne traitons pas avec les sessions.
maintenant, nous allons ajouter une méthode d'authentification dans application_controller
Ainsi, par défaut, Devise utilise le courrier électronique comme champ unique. Nous pouvons également utiliser des champs personnalisés. Dans ce cas, nous nous authentifierons avec user_email et auth_token.
before_filter do
user_email = params[:user_email].presence
user = user_email && User.find_by_email(user_email)
if user && Devise.secure_compare(user.authentication_token, params[:auth_token])
sign_in user, store: false
end
end
Note: Le code ci-dessus est purement basé sur votre logique j'essaie juste d'expliquer l'exemple de travail
Sur la ligne 6 du code ci-dessus, vous pouvez voir que j'ai défini store: false
ce qui empêchera de créer une session sur chaque requête.