0Pricing
Swift Academy · Lekcja

Middleware i uwierzytelnianie

Dodawanie logiki przekrojowej i ochrona tras.

Middleware i uwierzytelnianie to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Czym jest middleware?

Middleware znajduje się między przychodzącym żądaniem a handlerem trasy i może analizować lub modyfikować zarówno żądanie, jak i odpowiedź. Doskonale nadaje się do logowania, obsługi CORS, obsługi błędów i uwierzytelniania.

import Vapor

Protokół middleware

Niestandardowy middleware implementuje AsyncMiddleware i metodę respond(to:chainingTo:). Wykonajcie Państwo potrzebne operacje, a następnie wywołajcie next.respond(to:), aby kontynuować łańcuch.

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

Globalne rejestrowanie middleware

Dodajcie Państwo middleware do app.middleware, aby był uruchamiany dla każdego żądania. Kolejność ma znaczenie — middleware jest uruchamiany w kolejności, w jakiej został dodany.

app.middleware.use(LogMiddleware())

Wbudowany middleware

Vapor zawiera przydatne elementy middleware: ErrorMiddleware przekształca zgłoszone błędy w odpowiedzi, FileMiddleware udostępnia pliki statyczne, a CORSMiddleware obsługuje żądania między źródłami.

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

Middleware dla wybranych tras

Zastosujcie Państwo middleware tylko do niektórych tras, grupując je razem. Trasy wewnątrz grupy będą chronione, a pozostałe nie.

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

Podstawowe pojęcia uwierzytelniania

System uwierzytelniania Vapor składa się z dwóch części: modelu Authenticatable (użytkownika) oraz middleware Authenticator, który weryfikuje dane uwierzytelniające i zapisuje użytkownika w żądaniu.

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

Pisanie podstawowego authenticatora

AsyncBasicAuthenticator obsługuje uwierzytelnianie HTTP Basic. Zaimplementujcie Państwo authenticate(basic:for:): wyszukajcie użytkownika, zweryfikujcie hasło i po pomyślnym uwierzytelnieniu wywołajcie req.auth.login(user).

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

Haszowanie haseł za pomocą Bcrypt

Nigdy nie przechowujcie Państwo haseł w postaci jawnej. Vapor zawiera Bcrypt, który służy do haszowania haseł podczas rejestracji i weryfikowania ich podczas logowania. Haszowanie jest jednokierunkowe — weryfikacja porównuje podane hasło z zapisanym haszem.

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

Ochrona tras za pomocą guarda

Połączcie Państwo authenticator z AppUser.guardMiddleware(), który odrzuca nieuwierzytelnione żądania, zwracając status 401. Umieśćcie chronione trasy w grupie zabezpieczonej przez oba elementy.

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

Odczytywanie uwierzytelnionego użytkownika

W chronionym handlerze należy pobrać zalogowanego użytkownika za pomocą req.auth.require(_:) (zgłasza błąd, jeśli użytkownik nie istnieje) lub req.auth.get(_:) (zwraca wartość opcjonalną). W ten sposób można ograniczyć dane do bieżącego użytkownika.

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

Uwierzytelnianie tokenem

W przypadku API często używa się tokenów typu bearer. Model tokenu jest zgodny z ModelTokenAuthenticatable, dzięki czemu Vapor może zweryfikować nagłówek Authorization: Bearer ... i automatycznie wczytać powiązanego użytkownika.

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

Szybkie sprawdzenie: middleware i uwierzytelnianie

Sprawdź swoją wiedzę.

Podsumowanie: middleware i uwierzytelnianie

Nauczono się przechwytywać żądania i je zabezpieczać:

  • Middleware (AsyncMiddleware) opakowuje żądania; można go zarejestrować globalnie lub dla grupy tras.
  • Należy używać wbudowanych elementów, takich jak ErrorMiddleware i CORSMiddleware.
  • Należy sprawić, aby użytkownik był Authenticatable, napisać Authenticator i wywołać req.auth.login.
  • Należy haszować dane za pomocą Bcrypt, chronić trasy przez guardMiddleware() i odczytywać użytkownika za pomocą req.auth.require.

Często zadawane pytania

Czy lekcja „Middleware i uwierzytelnianie” jest bezpłatna?

Tak — pełny tekst „Middleware i uwierzytelnianie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Middleware i uwierzytelnianie”?

Dodawanie logiki przekrojowej i ochrona tras. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Middleware i uwierzytelnianie”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Routing i obsługa żądań
  2. Kodowanie treści i JSON
  3. Fluent ORM i modele
  4. Middleware i uwierzytelnianie
← Powrót do Swift Academy