パスワード認証
Bcryptを利用してセキュアにハッシュ化したパスワードを保持し、それを用いて認証するための仕組みを提供しています。
まずモデルにハッシュ化されたパスワードを保持するためpasswordDigest
フィールドを追加します。
model User { // ... passwordDigest String // パスワードのハッシュ値を保持する}
次にhasSecurePassword()
を利用してパスワードのハッシュ化と認証を行うための機能をモデルに対して追加します。
import { hasSecurePassword, Mix } from "accel-record";import { ApplicationRecord } from "./applicationRecord.js";
export class UserModel extends Mix(ApplicationRecord, hasSecurePassword()) {}
これでpassword
やpasswordConfirmation
フィールドを利用してパスワードのバリデーションとハッシュ化を、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"); // => falseuser.authenticate("myPassword"); // => true
パスワード保持用のフィールド名をpasswordDigest
以外に設定したり、複数のパスワードをモデルで管理することもできます。
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 フィールドを利用) {}