0Pricing
Swift Academy · Lektion

Middleware und Authentifizierung

Fügen Sie übergreifende Logik hinzu und schützen Sie Routen.

Middleware und Authentifizierung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Middleware?

Middleware befindet sich zwischen der eingehenden Anfrage und Ihrem Routen-Handler und kann sowohl die Anfrage als auch die Antwort prüfen oder ändern. Sie eignet sich besonders für Logging, CORS, Fehlerbehandlung und Authentifizierung.

import Vapor

Das Middleware-Protokoll

Eine benutzerdefinierte Middleware entspricht dem Protokoll AsyncMiddleware und implementiert respond(to:chainingTo:). Führen Sie Ihre Verarbeitung durch und rufen Sie anschließend next.respond(to:) auf, um die Kette fortzusetzen.

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)
    }
}

Middleware global registrieren

Fügen Sie eine Middleware zu app.middleware hinzu, damit sie bei jeder Anfrage ausgeführt wird. Die Reihenfolge ist wichtig – die Middleware wird in der Reihenfolge ihrer Hinzufügung ausgeführt.

app.middleware.use(LogMiddleware())

Integrierte Middleware

Vapor enthält nützliche Middleware: ErrorMiddleware wandelt ausgelöste Fehler in Antworten um, FileMiddleware stellt statische Dateien bereit und CORSMiddleware verarbeitet Cross-Origin-Anfragen.

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

Routenspezifische Middleware

Wenden Sie Middleware nur auf bestimmte Routen an, indem Sie diese mit der Middleware gruppieren. Die Routen innerhalb der Gruppe sind geschützt, die übrigen nicht.

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

Konzepte der Authentifizierung

Das Authentifizierungssystem von Vapor besteht aus zwei Teilen: einem Authenticatable-Modell (Ihrem Benutzer) und einer Authenticator-Middleware, die Anmeldedaten überprüft und den Benutzer in der Anfrage speichert.

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() {}
}

Einen Basic Authenticator schreiben

Ein AsyncBasicAuthenticator verarbeitet die HTTP-Basic-Authentifizierung. Implementieren Sie authenticate(basic:for:): Suchen Sie den Benutzer, überprüfen Sie das Passwort und rufen Sie bei Erfolg req.auth.login(user) auf.

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)
        }
    }
}

Passwörter mit Bcrypt hashen

Speichern Sie niemals Passwörter im Klartext. Vapor enthält Bcrypt, um Passwörter bei der Registrierung zu hashen und bei der Anmeldung zu überprüfen. Hashing ist eine Einwegoperation; bei der Überprüfung wird ein Kandidat mit dem gespeicherten Hash verglichen.

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

Routen mit einem Guard schützen

Kombinieren Sie den Authenticator mit AppUser.guardMiddleware(), der nicht authentifizierte Anfragen mit 401 zurückweist. Gruppieren Sie geschützte Routen hinter beiden Komponenten.

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

Authentifizierten Benutzer auslesen

Rufen Sie innerhalb eines geschützten Handlers den angemeldeten Benutzer mit req.auth.require(_:) ab (wirft einen Fehler, wenn er nicht vorhanden ist) oder mit req.auth.get(_:) (optional). So können Sie Daten auf den aktuellen Benutzer beschränken.

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

Token-Authentifizierung

Für APIs sind Bearer-Tokens üblich. Ein Token-Modell entspricht ModelTokenAuthenticatable. Dadurch kann Vapor einen Authorization: Bearer ...-Header überprüfen und den zugehörigen Benutzer automatisch laden.

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

Kurzer Check: Middleware und Authentifizierung

Überprüfen Sie Ihr Verständnis.

Zusammenfassung: Middleware und Authentifizierung

Sie haben gelernt, Anfragen abzufangen und abzusichern:

  • Middleware (AsyncMiddleware) umschließt Anfragen. Sie kann global oder für eine Route-Gruppe registriert werden.
  • Verwenden Sie integrierte Middleware wie ErrorMiddleware und CORSMiddleware.
  • Machen Sie einen Benutzer Authenticatable, schreiben Sie einen Authenticator und rufen Sie req.auth.login auf.
  • Hashen Sie Passwörter mit Bcrypt, schützen Sie Routen mit guardMiddleware() und lesen Sie den Benutzer über req.auth.require aus.

Häufig gestellte Fragen

Ist die Lektion „Middleware und Authentifizierung“ kostenlos?

Ja — der vollständige Text von „Middleware und Authentifizierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Middleware und Authentifizierung“?

Fügen Sie übergreifende Logik hinzu und schützen Sie Routen. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Middleware und Authentifizierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Routing und Request-Verarbeitung
  2. Content- und JSON-Codierung
  3. Fluent ORM und Models
  4. Middleware und Authentifizierung
← Zurück zu Swift Academy