Ga naar inhoud

Wachtwoorden

Vapor bevat een wachtwoord hashing API om u te helpen wachtwoorden veilig op te slaan en te verifiëren. Deze API kan op basis van de omgeving worden geconfigureerd en ondersteunt asynchroon hashen.

Configuratie

Om de wachtwoord hasher van de Applicatie in te stellen, gebruik app.passwords.

import Vapor

app.passwords.use(...)

Bcrypt

Om Vapor's Bcrypt API te gebruiken voor het hashen van wachtwoorden, geef .bcrypt op. Dit is de standaardinstelling.

app.passwords.use(.bcrypt)

Bcrypt zal een waarde van 12 gebruiken, tenzij anders aangegeven. U kunt dit instellen door de cost parameter mee te geven.

app.passwords.use(.bcrypt(cost: 8))

Plaintext

Vapor bevat een onveilige wachtwoord hasher die wachtwoorden als plaintext opslaat en verifieert. Dit zou niet in productie gebruikt moeten worden, maar het kan nuttig zijn om te testen.

switch app.environment {
case .testing:
    app.passwords.use(.plaintext)
default: break
}

Hashen

Om wachtwoorden te hashen, gebruik de password helper die beschikbaar is op Request.

let digest = try req.password.hash("vapor")

Wachtwoord digests kunnen geverifieerd worden met het plaintext wachtwoord via de verify methode.

let bool = try req.password.verify("vapor", created: digest)

Dezelfde API is beschikbaar op Application voor gebruik tijdens het opstarten.

let digest = try app.password.hash("vapor")

Async

Hash-algoritmen voor wachtwoorden zijn ontworpen om traag en CPU-intensief te zijn. Daarom wilt u misschien de event loop niet blokkeren tijdens het hashen van wachtwoorden. Vapor biedt een asynchrone wachtwoord hashing API die het hashen naar een achtergrond thread pool stuurt. Om de asynchrone API te gebruiken, gebruik de async eigenschap op een wachtwoord hasher.

req.password.async.hash("vapor").map { digest in
    // Verwerking afhandelen.
}

// of

let digest = try await req.password.async.hash("vapor")

Het verifiëren van digests werkt op dezelfde manier:

req.password.async.verify("vapor", created: digest).map { bool in
    // Resultaat afhandelen.
}

// of

let result = try await req.password.async.verify("vapor", created: digest)

Het berekenen van hashes op achtergrond threads kan de event loops van je applicatie vrijmaken om meer inkomende verzoeken af te handelen.