コンテンツにスキップ

パスワード認証

Bcryptを利用してセキュアにハッシュ化したパスワードを保持し、それを用いて認証するための仕組みを提供しています。

まずモデルにハッシュ化されたパスワードを保持するためpasswordDigestフィールドを追加します。

db/schema/main.prisma
model User {
// ...
passwordDigest String // パスワードのハッシュ値を保持する
}

次にhasSecurePassword()を利用してパスワードのハッシュ化と認証を行うための機能をモデルに対して追加します。

src/models/user.ts
import { hasSecurePassword, Mix } from "accel-record";
import { ApplicationRecord } from "./applicationRecord.js";
export class UserModel extends Mix(ApplicationRecord, hasSecurePassword()) {}

これでpasswordpasswordConfirmationフィールドを利用してパスワードのバリデーションとハッシュ化を、authenticate()メソッドを利用してパスワードの認証を行うことができます。

import { User } from "./models/index.js";
const user = User.build({});
user.password = "";
user.save(); // => false (password can't be blank)
user.password = "myPassword";
user.save(); // => false (password confirmation doesn't match)
user.passwordConfirmation = "myPassword";
user.save(); // => true
user.authenticate("invalid"); // => false
user.authenticate("myPassword"); // => true

パスワード保持用のフィールド名をpasswordDigest以外に設定したり、複数のパスワードをモデルで管理することもできます。

src/models/user.ts
import { hasSecurePassword, Mix } from "accel-record";
import { ApplicationRecord } from "./applicationRecord.js";
export class UserModel extends Mix(
ApplicationRecord,
hasSecurePassword(), // passwordDigest フィールドを利用
hasSecurePassword({ attribute: "recovery", validation: false }) // recoveryDigest フィールドを利用
) {}

関連リンク