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 VaporLe 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) // trueProté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
ErrorMiddlewareetCORSMiddleware. - Rendez un utilisateur
Authenticatable, écrivez unAuthenticator, puis appelezreq.auth.login. - Hachez les données avec
Bcrypt, protégez les routes avecguardMiddleware(), puis lisez l’utilisateur viareq.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
- Routage et gestion des requêtes
- Encodage du contenu et du JSON
- ORM Fluent et modèles
- Intergiciels et authentification