Middleware ja autentikointi
Lisää poikittaista logiikkaa ja suojaa reitit.
Middleware ja autentikointi on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mikä middleware on
Middleware toimii saapuvan pyynnön ja reittikäsittelijän välissä ja voi tarkastella tai muuttaa sekä pyyntöä että vastausta. Se sopii erinomaisesti lokitukseen, CORS-toimintoihin, virheenkäsittelyyn ja todennukseen.
import VaporMiddleware-protokolla
Mukautettu middleware toteuttaa AsyncMiddleware-protokollan ja metodin respond(to:chainingTo:). Suorittakaa tarvittavat toimet ja kutsukaa sitten next.respond(to:)-metodia ketjun jatkamiseksi.
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)
}
}Middelwaren rekisteröiminen yleisesti
Lisätkää middleware kohteeseen app.middleware, jotta sitä käytetään jokaisessa pyynnössä. Järjestyksellä on merkitystä — middleware suoritetaan lisäysjärjestyksessä.
app.middleware.use(LogMiddleware())Sisäänrakennettu middleware
Vapor sisältää hyödyllisiä middleware-komponentteja: ErrorMiddleware muuntaa heitetyt virheet vastauksiksi, FileMiddleware tarjoaa staattisia tiedostoja ja CORSMiddleware käsittelee alkuperien välisiä pyyntöjä.
let cors = CORSMiddleware(configuration: .default())
app.middleware.use(cors)Reittikohtainen middleware
Ottakaa middleware käyttöön vain tietyillä reiteillä ryhmittelemällä ne sen kanssa. Ryhmän sisällä olevat reitit suojataan, muut eivät.
let protected = app.grouped(LogMiddleware())
protected.get("dashboard") { req in "Secret dashboard" }Todennuksen käsitteet
Vaporin todennusjärjestelmässä on kaksi osaa: Authenticatable-malli (käyttäjänne) ja Authenticator-middleware, joka tarkistaa tunnistetiedot ja tallentaa käyttäjän pyyntöön.
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() {}
}Basic-todentajan kirjoittaminen
AsyncBasicAuthenticator käsittelee HTTP Basic -todennusta. Toteuttakaa authenticate(basic:for:): hakekaa käyttäjä, tarkistakaa salasana ja kutsukaa onnistuneen todennuksen jälkeen req.auth.login(user)-metodia.
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)
}
}
}Salasanojen hajauttaminen Bcryptillä
Älkää koskaan tallentako salasanoja selväkielisinä. Vapor sisältää Bcrypt-toiminnon, jolla salasanat hajautetaan rekisteröitymisen yhteydessä ja tarkistetaan kirjautumisen yhteydessä. Hajautus on yksisuuntainen; tarkistuksessa ehdokasta verrataan tallennettuun hajautusarvoon.
let hash = try Bcrypt.hash("s3cret")
let ok = try Bcrypt.verify("s3cret", created: hash) // trueReittien suojaaminen Guardilla
Yhdistäkää todentajaan AppUser.guardMiddleware(), joka hylkää todentamattomat pyynnöt 401-virheellä. Sijoittakaa suojatut reitit molempien taakse.
let protected = app.grouped(
UserAuthenticator(),
AppUser.guardMiddleware()
)
protected.get("me") { req -> String in
let user = try req.auth.require(AppUser.self)
return user.username
}Todennetun käyttäjän lukeminen
Suojatussa käsittelijässä kirjautunut käyttäjä haetaan kutsumalla req.auth.require(_:)-metodia (heittää virheen, jos käyttäjää ei ole) tai req.auth.get(_:)-metodia (valinnainen). Näin tiedot voidaan rajata nykyiseen käyttäjään.
app.get("profile") { req -> String in
let user = try req.auth.require(AppUser.self)
return "Hello, " + user.username
}Token-todennus
API-rajapinnoissa bearer-tokenit ovat yleisiä. Token-malli toteuttaa ModelTokenAuthenticatable-protokollan, jolloin Vapor voi tarkistaa Authorization: Bearer ... -otsakkeen ja ladata siihen liittyvän käyttäjän automaattisesti.
let tokenProtected = app.grouped(
UserToken.authenticator(),
AppUser.guardMiddleware()
)Pikatarkistus: middleware ja todennus
Varmistakaa, että ymmärrätte asian.
Kertaus: middleware ja todennus
Opitte sieppaamaan pyynnöt ja suojaamaan ne:
- Middleware (
AsyncMiddleware) ympäröi pyynnöt; se voidaan rekisteröidä globaalisti tai reittiryhmäkohtaisesti. - Käyttäkää valmiita middleware-komponentteja, kuten
ErrorMiddlewarejaCORSMiddleware. - Tehkää käyttäjästä
Authenticatable, kirjoittakaaAuthenticatorja kutsukaareq.auth.login-metodia. - Tiivistäkää salasanat
Bcrypt-algoritmilla, suojatkaa reititguardMiddleware()-metodilla ja lukekaa käyttäjäreq.auth.require-metodilla.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”Middleware ja autentikointi” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Middleware ja autentikointi”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Middleware ja autentikointi”?
Lisää poikittaista logiikkaa ja suojaa reitit. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Middleware ja autentikointi”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Reititys ja pyyntöjen käsittely
- Sisältö ja JSON-koodaus
- Fluent ORM ja mallit
- Middleware ja autentikointi