All guides
Intermediate-AdvancedSelf-pacedFree GuideSection 22/33

Authentification avec Devise et autorisation Pundit

Learn to build and check a web application with development tools and AI assistants. Practise design, coding and validation.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and sources

Section 13.5.3 : Authentification avec Devise et autorisation Pundit

🎯 Objectif pédagogique

Implémenter un système d'authentification complet avec Devise (inscription, connexion, mot de passe oublié) et gérer les autorisations avec Pundit (qui peut faire quoi).


Devise : l'authentification en 10 minutes

Devise est LA gem d'authentification de Rails. Elle gère inscription, connexion, déconnexion, récupération de mot de passe, confirmation email, et bien plus.

# Installation
bundle add devise
rails generate devise:install
rails generate devise User
rails db:migrate

Cela crée automatiquement :

  • →Le modèle User avec email et mot de passe chiffré
  • →Les routes de connexion/inscription
  • →Les vues de formulaire
  • →Les migrations de base de données

Configuration Devise

# app/models/user.rb
class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :confirmable, :trackable

  has_many :articles
  has_one :profile
end
# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_action :authenticate_user!  # Requiert connexion partout

  # Permettre des champs supplémentaires à l inscription
  before_action :configure_permitted_parameters, if: :devise_controller?

  private

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :avatar])
    devise_parameter_sanitizer.permit(:account_update, keys: [:name, :avatar])
  end
end

Helpers Devise dans les vues

<% if user_signed_in? %>
  <span>Bonjour, <%= current_user.name %></span>
  <%= link_to 'Mon profil', edit_user_registration_path %>
  <%= button_to 'Déconnexion', destroy_user_session_path, method: :delete %>
<% else %>
  <%= link_to 'Connexion', new_user_session_path %>
  <%= link_to 'Inscription', new_user_registration_path %>
<% end %>

Pundit : l'autorisation

L'authentification répond à "Qui êtes-vous ?". L'autorisation répond à "Que pouvez-vous faire ?". Pundit gère cette seconde question.

bundle add pundit
rails generate pundit:install
# app/policies/article_policy.rb

class ArticlePolicy < ApplicationPolicy
  def index?
    true  # Tout le monde peut voir la liste
  end

  def show?
    true  # Tout le monde peut voir un article
  end

  def create?
    user.present?  # Tout utilisateur connecté
  end

  def update?
    user == record.author || user.admin?
  end

  def destroy?
    user == record.author || user.admin?
  end

  class Scope < Scope
    def resolve
      if user&.admin?
        scope.all
      else
        scope.where(published: true)
      end
    end
  end
end
# Dans le controller
class ArticlesController < ApplicationController
  def show
    @article = Article.find(params[:id])
    authorize @article  # Vérifie ArticlePolicy#show?
  end

  def index
    @articles = policy_scope(Article)  # Filtre via Scope
  end
end

Authentification vs Autorisation

AspectAuthentification (Devise)Autorisation (Pundit)
QuestionQui êtes-vous ?Que pouvez-vous faire ?
MécanismeEmail + Mot de passePolicies + Rôles
Résultatcurrent_userAutorisé / Non autorisé
Erreur401 Unauthorized403 Forbidden
Gem RailsDevisePundit

← Scroll horizontally →

Quick Check

Un utilisateur est connecté mais essaie de supprimer un article qui ne lui appartient pas. Quelle erreur est levée ?

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.