# パスワード {#passwords} Vaporには、パスワードを安全に保存・検証するためのパスワードハッシュAPIが含まれています。このAPIは環境に基づいて設定可能で、非同期ハッシュ化をサポートしています。 ## 設定 {#configuration} アプリケーションのパスワードハッシャーを設定するには、`app.passwords`を使用します。 ```swift import Vapor app.passwords.use(...) ``` ### Bcrypt パスワードハッシュ化にVaporの[Bcrypt API](crypto.md#bcrypt)を使用するには、`.bcrypt`を指定します。これがデフォルトです。 ```swift app.passwords.use(.bcrypt) ``` Bcryptは、特に指定しない限りコスト12を使用します。`cost`パラメータを渡すことで、これを設定できます。 ```swift app.passwords.use(.bcrypt(cost: 8)) ``` ### Plaintext Vaporには、パスワードを平文として保存・検証する安全でないパスワードハッシャーが含まれています。これは本番環境では使用すべきではありませんが、テストには便利です。 ```swift switch app.environment { case .testing: app.passwords.use(.plaintext) default: break } ``` ## ハッシュ化 {#hashing} パスワードをハッシュ化するには、`Request`で利用可能な`password`ヘルパーを使用します。 ```swift let digest = try req.password.hash("vapor") ``` パスワードダイジェストは、`verify`メソッドを使用して平文パスワードと照合できます。 ```swift let bool = try req.password.verify("vapor", created: digest) ``` 同じAPIは、起動時に使用するために`Application`でも利用可能です。 ```swift let digest = try app.password.hash("vapor") ``` ### Async パスワードハッシュアルゴリズムは、遅くCPU集約的になるように設計されています。このため、パスワードをハッシュ化する際にイベントループをブロックしないようにしたい場合があります。Vaporは、ハッシュ化をバックグラウンドスレッドプールにディスパッチする非同期パスワードハッシュAPIを提供します。非同期APIを使用するには、パスワードハッシャーの`async`プロパティを使用します。 ```swift req.password.async.hash("vapor").map { digest in // ダイジェストを処理 } // または let digest = try await req.password.async.hash("vapor") ``` ダイジェストの検証も同様に機能します: ```swift req.password.async.verify("vapor", created: digest).map { bool in // 結果を処理 } // または let result = try await req.password.async.verify("vapor", created: digest) ``` バックグラウンドスレッドでハッシュを計算することで、アプリケーションのイベントループを解放し、より多くの受信リクエストを処理できるようになります。