0Pricing
Swift Academy · Leçon

Intergiciels et authentification

Ajoutez une logique transversale et protégez les itinéraires.

Intergiciels et authentification est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Qu’est-ce qu’un intergiciel

Un intergiciel se place entre la requête entrante et votre fonction de traitement de route. Il peut examiner ou modifier la requête et la réponse. Il est idéal pour la journalisation, CORS, la gestion des erreurs et l’authentification.

import Vapor

Le protocole des intergiciels

Un intergiciel personnalisé est conforme à AsyncMiddleware et implémente respond(to:chainingTo:). Effectuez vos opérations, puis appelez next.respond(to:) pour poursuivre la chaîne.

struct LogMiddleware: AsyncMiddleware {
    func respond(to req: Request, chainingTo next: AsyncResponder) async throws -> Response {
        req.logger.info("Incoming: " + req.url.path)
        return try await next.respond(to: req)
    }
}

Enregistrer un intergiciel globalement

Ajoutez un intergiciel à app.middleware pour l’exécuter pour chaque requête. L’ordre est important : les intergiciels s’exécutent dans l’ordre où ils sont ajoutés.

app.middleware.use(LogMiddleware())

Intergiciels intégrés

Vapor fournit plusieurs intergiciels utiles : ErrorMiddleware transforme les erreurs levées en réponses, FileMiddleware diffuse des fichiers statiques et CORSMiddleware gère les requêtes entre origines différentes.

let cors = CORSMiddleware(configuration: .default())
app.middleware.use(cors)

Intergiciel propre à une route

Appliquez un intergiciel à certaines routes seulement en les regroupant avec celui-ci. Les routes du groupe sont protégées ; les autres ne le sont pas.

let protected = app.grouped(LogMiddleware())
protected.get("dashboard") { req in "Secret dashboard" }

Concepts de l’authentification

Le système d’authentification de Vapor comporte deux éléments : un modèle authentifiable (votre utilisateur) et un intergiciel authentificateur qui vérifie les identifiants et enregistre l’utilisateur dans la requête.

final class AppUser: Model, Content, Authenticatable {
    static let schema = "users"
    @ID(key: .id) var id: UUID?
    @Field(key: "username") var username: String
    @Field(key: "password_hash") var passwordHash: String
    init() {}
}

Écrire un authentificateur de base

Un AsyncBasicAuthenticator gère l’authentification HTTP de base. Implémentez authenticate(basic:for:) : recherchez l’utilisateur, vérifiez le mot de passe, puis appelez req.auth.login(user) en cas de réussite.

struct UserAuthenticator: AsyncBasicAuthenticator {
    func authenticate(basic: BasicAuthorization, for req: Request) async throws {
        guard let user = try await AppUser.query(on: req.db)
            .filter(\.$username == basic.username).first() else { return }
        if try Bcrypt.verify(basic.password, created: user.passwordHash) {
            req.auth.login(user)
        }
    }
}

Hacher les mots de passe avec Bcrypt

Ne stockez jamais les mots de passe en clair. Vapor inclut Bcrypt pour les hacher lors de l’inscription et les vérifier lors de la connexion. Le hachage est à sens unique ; la vérification compare une valeur candidate au hachage stocké.

let hash = try Bcrypt.hash("s3cret")
let ok = try Bcrypt.verify("s3cret", created: hash) // true

Protéger les routes avec un garde

Combinez l’authentificateur avec AppUser.guardMiddleware(), qui rejette les requêtes non authentifiées avec le statut 401. Regroupez les routes protégées derrière ces deux éléments.

let protected = app.grouped(
    UserAuthenticator(),
    AppUser.guardMiddleware()
)
protected.get("me") { req -> String in
    let user = try req.auth.require(AppUser.self)
    return user.username
}

Lire l’utilisateur authentifié

Dans un gestionnaire protégé, récupérez l’utilisateur connecté avec req.auth.require(_:) (lève une erreur s’il est absent) ou req.auth.get(_:) (facultatif). C’est ainsi que vous limitez les données à l’utilisateur actuel.

app.get("profile") { req -> String in
    let user = try req.auth.require(AppUser.self)
    return "Hello, " + user.username
}

Authentification par jeton

Pour les API, les jetons porteurs sont courants. Un modèle de jeton est conforme à ModelTokenAuthenticatable, ce qui permet à Vapor de vérifier un en-tête Authorization: Bearer ... et de charger automatiquement l’utilisateur associé.

let tokenProtected = app.grouped(
    UserToken.authenticator(),
    AppUser.guardMiddleware()
)

Vérification rapide : intergiciel et authentification

Vérifiez votre compréhension.

Récapitulatif : intergiciel et authentification

Vous avez appris à intercepter les requêtes et à les sécuriser :

  • L’intergiciel (AsyncMiddleware) enveloppe les requêtes ; enregistrez-le globalement ou par groupe de routes.
  • Utilisez des composants intégrés comme ErrorMiddleware et CORSMiddleware.
  • Rendez un utilisateur Authenticatable, écrivez un Authenticator, puis appelez req.auth.login.
  • Hachez les données avec Bcrypt, protégez les routes avec guardMiddleware(), puis lisez l’utilisateur via req.auth.require.

Questions Fréquemment Posées

La leçon « Intergiciels et authentification » est-elle gratuite ?

Oui — le texte complet de « Intergiciels et authentification » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Intergiciels et authentification » ?

Ajoutez une logique transversale et protégez les itinéraires. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Intergiciels et authentification » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Routage et gestion des requêtes
  2. Encodage du contenu et du JSON
  3. ORM Fluent et modèles
  4. Intergiciels et authentification
← Retour à Swift Academy