Hasła#
Vapor zawiera API do hashowania haseł, które pomaga bezpiecznie przechowywać i weryfikować hasła. To API jest konfigurowalne w zależności od środowiska i wspiera asynchroniczne hashowanie.
Konfiguracja#
Aby skonfigurować hasher haseł Application, użyj app.passwords.
import Vapor
app.passwords.use(...)
Bcrypt#
Aby użyć API Bcrypt Vapora do hashowania haseł, określ .bcrypt. Jest to opcja domyślna.
app.passwords.use(.bcrypt)
Bcrypt użyje kosztu 12, chyba że określono inaczej. Możesz to skonfigurować, przekazując parametr cost.
app.passwords.use(.bcrypt(cost: 8))
Plaintext#
Vapor zawiera niebezpieczny hasher haseł, który przechowuje i weryfikuje hasła jako zwykły tekst (plaintext). Nie powinien być używany w produkcji, ale może być przydatny do testowania.
switch app.environment {
case .testing:
app.passwords.use(.plaintext)
default: break
}
Hashowanie#
Aby zahashować hasła, użyj pomocnika password dostępnego na Request.
let digest = try req.password.hash("vapor")
Skróty haseł (digest) można zweryfikować względem hasła w postaci zwykłego tekstu za pomocą metody verify.
let bool = try req.password.verify("vapor", created: digest)
To samo API jest dostępne na Application do użycia podczas uruchamiania (boot).
let digest = try app.password.hash("vapor")
Async#
Algorytmy hashowania haseł są zaprojektowane tak, aby być wolne i intensywnie obciążać CPU. Z tego powodu możesz chcieć uniknąć blokowania event loopa podczas hashowania haseł. Vapor udostępnia asynchroniczne API do hashowania haseł, które przekazuje hashowanie do puli wątków w tle. Aby użyć asynchronicznego API, użyj właściwości async na hasherze haseł.
req.password.async.hash("vapor").map { digest in
// Handle digest.
}
// or
let digest = try await req.password.async.hash("vapor")
Weryfikacja skrótów działa podobnie:
req.password.async.verify("vapor", created: digest).map { bool in
// Handle result.
}
// or
let result = try await req.password.async.verify("vapor", created: digest)
Obliczanie hashy w wątkach w tle może odciążyć event loopy Twojej aplikacji, aby mogły obsługiwać więcej przychodzących żądań.