コンテンツにスキップ

パスワード

Vaporには、パスワードを安全に保存・検証するためのパスワードハッシュAPIが含まれています。このAPIは環境に基づいて設定可能で、非同期ハッシュ化をサポートしています。

設定

アプリケーションのパスワードハッシャーを設定するには、app.passwordsを使用します。

import Vapor

app.passwords.use(...)

Bcrypt

パスワードハッシュ化にVaporのBcrypt APIを使用するには、.bcryptを指定します。これがデフォルトです。

app.passwords.use(.bcrypt)

Bcryptは、特に指定しない限りコスト12を使用します。costパラメータを渡すことで、これを設定できます。

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

Plaintext

Vaporには、パスワードを平文として保存・検証する安全でないパスワードハッシャーが含まれています。これは本番環境では使用すべきではありませんが、テストには便利です。

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

ハッシュ化

パスワードをハッシュ化するには、Requestで利用可能なpasswordヘルパーを使用します。

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

パスワードダイジェストは、verifyメソッドを使用して平文パスワードと照合できます。

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

同じAPIは、起動時に使用するためにApplicationでも利用可能です。

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

Async

パスワードハッシュアルゴリズムは、遅くCPU集約的になるように設計されています。このため、パスワードをハッシュ化する際にイベントループをブロックしないようにしたい場合があります。Vaporは、ハッシュ化をバックグラウンドスレッドプールにディスパッチする非同期パスワードハッシュAPIを提供します。非同期APIを使用するには、パスワードハッシャーのasyncプロパティを使用します。

req.password.async.hash("vapor").map { digest in
    // ダイジェストを処理
}

// または

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

ダイジェストの検証も同様に機能します:

req.password.async.verify("vapor", created: digest).map { bool in
    // 結果を処理
}

// または

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

バックグラウンドスレッドでハッシュを計算することで、アプリケーションのイベントループを解放し、より多くの受信リクエストを処理できるようになります。