🛣️ 認証ルート
認証ルートは、NodeBlocksアプリケーションでユーザー認証と認可操作のための事前設定されたHTTPエンドポイントを提供します。これらのルートは、ブロック(純粋なビジネスロジック関数)、ハンドラー、バリデーター、ミドルウェアを組み合わせて、ログイン、登録、トークン管理、メール確認の完全なAPIエンドポイントを作成します。
🎯 概要
認証ルートは以下の目的で設計されています:
- 完全なAPIエンドポイントの提供 - ユーザー認証操作用
- ブロックとハンドラーをバリデーターと組み合わせる - 安全な操作のため
- 認証と認可チェックを含む
- 関数型コンポジションパターンのサポート
- ログとエラー管理の自動処理
📋 ルート構造
各認証ルートは一貫したパターンに従います:
- HTTPメソッド: 操作タイプを定義(GET、POST、PATCH、DELETE)
- Path: パラメータを含むエンドポイントURLを指定
- ハンドラー: ブロックとハンドラーを使用したコンポーズ関数チェーン
- バリデーター: 認証と認可チェック
🔧 利用可能な認証ルート
registerCredentialsRoute
オプションの招待処理を含む新しいユーザー認証情報を登録します。
目的: 招待受け入れのサポートを含むユーザー登録を処理
ルート詳細:
- Method:
POST - Path:
/auth/register - 認証: 不要
ハンドラー:
- 招待トークンあり:
buildCheckInvitationTokenPayload,checkToken,getInvitationIdFromTokenInfo,getInvitationById,isPendingInvitation,registerCredentials,buildAcceptInvitationPayload,updateInvitation - トークンなし:
registerCredentials - 最終:
registerTerminator
バリデーター: なし
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.registerCredentialsRoute);
注意: 招待固有の機能については、招待ブロックを参照してください。
loginWithCredentialsRoute
オプションのMFAサポートを含む認証情報によるユーザー認証。
目的: 認証情報バリデーションとオプションの多要素認証を含むユーザーログインを処理
ルート詳細:
- Method:
POST - Path:
/auth/login - 認証: 不要
認証フロー:
MFAが無効の場合(デフォルト):
- 認証情報をバリデーション → アクセストークンを作成 → リフレッシュトークンを作成 → レスポンスCookieを設定 → ログインレスポンスを返す
MFAが有効の場合 (isMfaEnabled: true):
- 認証情報をバリデーション → MFAコードを作成 → MFAトークンを作成 → メールでMFAコードを送信 → MFAトークンを返す
ハンドラー/ブロック (MFA有効):
loginWithCredentials: ユーザー認証情報をバリデーションcreateMfaCode: 安全な数値MFAコードを生成createMfaToken: MFAチャレンジトークンを作成して保存sendMfaCode: メールでMFAコードを送信
ハンドラー (MFA無効):
loginWithCredentials: ユーザー認証情報をバリデーションcreateAccessToken: JWTアクセストークンを生成createRefreshToken: JWTリフレッシュトークンを生成setResponseCookie: HTTP専用リフレッシュトークンCookieを設定
バリデーター: なし
リクエストボディ (MFA無効):
{
"email": "user@example.com",
"password": "securePassword123",
"fingerprint": "device-fingerprint"
}
レスポンス (MFA無効):
{
"id": "identity-uuid",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
レスポンス (MFA有効):
{
"token": "encrypted-mfa-challenge-token"
}
主な機能 (MFA):
- 設定可能なMFAコード長(デフォルト: 6桁)
- 設定可能なMFAトークンの有効期限(デフォルト: 10分)
- テンプレートベースのメールカスタマイズ
isMfaEnabled設定に基づく条件付きフロー- 自動MFAコード生成と配信
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.loginWithCredentialsRoute);
// Configure MFA in authentication service:
const authService = createAuthenticationService({
// ... other config
isMfaEnabled: true,
mfaCodeLength: 6,
mfaTokenExpireTime: '10m',
mfaCodeEmailConfig: {
sender: 'noreply@example.com',
emailConfig: {
subject: 'Your MFA Code',
bodyTemplate: 'Your verification code is: ${code}'
}
}
});
MFAフロー:
- ユーザーが認証情報を送信
- システムが認証情報をバリデーション
- MFAが有効な場合:
- MFAコードを生成
- MFAチャレンジトークンを作成
- メールでコードを送信
- MFAトークンをクライアントに返す
- クライアントはトークンとMFAコードを送信する必要がある(別のエンドポイント)
- MFAが無効な場合:
- アクセスとリフレッシュトークンを生成
- トークンを直接返す
resendMfaCodeRoute
新しい確認コードが必要なユーザー向けにPOST /auth/mfa/resend経由でMFAコードを再送信します。
目的: 以前のコードを無効化しながら新しいMFAコードを生成して送信
ルート詳細:
- Method:
POST - Path:
/auth/mfa/resend - 認証: 不要(MFAトークンを使用)
ハンドラー/ブロック:
getMfaChallengeTokenTarget: MFAチャレンジターゲット定数を取得getFingerprint: ヘッダーからデバイスフィンガープリントを抽出checkOneTimeToken: MFAトークンを検証して復号化assertValidOneTimeTokenExists: トークンがデータベースに存在することをバリデーションinvalidateOneTimeToken: 古いトークンを使用済みとしてマークgetIdentityById: トークンからユーザーアイデンティティを取得createMfaCode: 新しい安全な数値MFAコードを生成createMfaToken: 新しいMFAチャレンジトークンを作成して保存sendMfaCode: メールで新しいMFAコードを送信
バリデーター: なし
リクエストボディ:
{
"token": "encrypted-mfa-challenge-token"
}
レスポンス (成功):
{
"token": "new-encrypted-mfa-challenge-token"
}
エラーレスポンス:
- 400 Bad Request: 無効なリクエストボディまたはトークンフォーマット
- 401 Unauthorized: MFAトークンの有効期限切れまたは無効
- 403 Forbidden: トークンが既に使用済みまたは間違ったターゲット
- 404 Not Found: MFAトークンが見つからない、またはアイデンティティが見つからない
- 500 Internal Server Error: コード再生成またはメール送信中に予期しないエラー
処理プロセス:
- MFAチャレンジターゲット定数を抽出
- リクエストヘッダーからデバイスフィンガープリントを取得
- MFAトークンを検証して復号化
- トークンがデータベースに存在し、まだ使用されていないことをバリデーション
- 古いMFAトークンを無効化(セキュリティ対策)
- トークンデータからユーザーアイデンティティを取得
- 新しい安全なMFAコードを生成
- 新しいMFAチャレンジトークンを作成して保存
- メールで新しいMFAコードを送信
- 新しいMFAトークンをクライアントに返す
主な機能:
- セキュリティのために以前のMFAトークンを無効化
- 完全に新しいMFAコードを生成(古いものを再利用しない)
- 新しい有効期限で新しいMFAトークンを発行
- 同じMFAワークフローのセキュリティを維持
- トークン無効化による悪用を防止
- 設定可能なコード長とトークンの有効期限
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.resendMfaCodeRoute);
// Typical resend flow:
// 1. User logs in (POST /auth/login) → receives MFA token
// 2. User requests resend (POST /auth/mfa/resend) → receives new MFA token
// 3. User receives new MFA code via email
// 4. User submits verification (POST /auth/mfa/verify) with new token and code
MFA再送信フロー:
Client Server
| |
| POST /auth/login |
|------------------------>|
| | - Validate credentials
| | - Generate MFA code
| | - Send code via email
| { token: "old-tkn" } | - Store code in token
|<------------------------|
| |
| User didn't receive |
| email or code expired |
| |
| POST /auth/mfa/resend |
| { token: "old-tkn" } |
|------------------------>|
| | - Verify old token
| | - Invalidate old token
| | - Generate NEW code
| | - Send NEW code email
| { token: "new-tkn" } | - Store in NEW token
|<------------------------|
| |
| User receives new code |
| via email: "654321" |
| |
| POST /auth/mfa/verify |
| { token: "new-tkn", |
| code: "654321" } |
|------------------------>|
| | - Verify token validity
| | - Compare codes
| | - Generate auth tokens
| { accessToken, ... } | - Invalidate MFA token
|<------------------------|
使用ケース:
- ユーザーが初期MFAコードメールを受信しなかった
- メール配信が遅延または失敗した
- ユーザーが誤ってメールを削除した
- ユーザーが入力する前にMFAコードが期限切れになった
- ユーザーが一時的にメールへのアクセスを失った
注意事項:
- 古いMFAトークンは再送信時にすぐに無効化される
- 新しいMFAコードはセキュリティのために古いものとは異なる
- トークンの有効期限タイマーは新しいトークンでリセットされる
- ユーザーは再送信後に新しいトークンでのみ確認できる
- メールテンプレートと送信者はサービスオプションで設定可能
verifyMfaCodeRoute
MFAコードを確認し、認証フローを完了します。
目的: ユーザーが送信したMFAコードを保存されたコードと照合し、認証トークンを発行
ルート詳細:
- Method:
POST - Path:
/auth/mfa/verify - 認証: 不要(MFAトークンを使用)
ハンドラー/ブロック:
getMfaChallengeTokenTarget: MFAチャレンジターゲット定数を取得getFingerprint: ヘッダーからデバイスフィンガープリントを抽出checkOneTimeToken: MFAトークンを検証して復号化assertValidOneTimeTokenExists: トークンがデータベースに存在することをバリデーションinvalidateOneTimeToken: トークンを使用済みとしてマークverifyMfaCode: ユーザーコードと保存されたコードを比較getIdentityById: ユーザーアイデンティティを取得createAccessToken: JWTアクセストークンを生成createRefreshToken: JWTリフレッシュトークンを生成setResponseCookie: HTTP専用リフレッシュトークンCookieを設定
バリデーター: なし
リクエストボディ:
{
"token": "encrypted-mfa-challenge-token",
"code": "123456"
}
レスポンス (成功):
{
"id": "identity-uuid",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
エラーレスポンス:
- 400 Bad Request: 無効なMFAコードが提供された
- 401 Unauthorized: MFAトークンの有効期限切れまたは無効
- 404 Not Found: MFAトークンが見つからない
- 500 Internal Server Error: 確認中に予期しないエラー
処理プロセス:
- MFAチャレンジターゲット定数を抽出
- リクエストヘッダーからデバイスフィンガープリントを取得
- MFAトークンを検証して復号化
- トークンがデータベースに存在し、まだ使用されていないことをバリデーション
- トークンを無効化(ワンタイム使用)
- ユーザーが提供したコードと保存されたコードを比較
- ユーザーアイデンティティを取得
- アクセスとリフレッシュトークンを生成
- リフレッシュトークンCookieを設定
- 認証トークンを返す
主な機能:
- ワンタイムトークン使用(確認後に無効化)
- 安全なコード比較
- 完全なMFAワークフロー
- 標準ログインと同じトークン構造を返す
- 自動トークン無効化により再利用を防止
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.verifyMfaCodeRoute);
// Complete MFA flow:
// 1. User logs in (POST /auth/login) → receives MFA token
// 2. User receives MFA code via email
// 3. User submits verification (POST /auth/mfa/verify)
// 4. System validates and returns access/refresh tokens
MFA確認フロー:
Client Server
| |
| POST /auth/login |
|------------------------>|
| | - Validate credentials
| | - Generate MFA code
| | - Send code via email
| { token: "..." } | - Store code in token
|<------------------------|
| |
| User receives code |
| via email: "123456" |
| |
| POST /auth/mfa/verify |
| { token, code } |
|------------------------>|
| | - Verify token validity
| | - Compare codes
| | - Generate auth tokens
| { accessToken, ... } | - Invalidate MFA token
|<------------------------|
logoutRoute
セッションを無効化し、トークンをクリアしてユーザーをログアウトします。
目的: ユーザーログアウトとセッションクリーンアップを処理
ルート詳細:
- Method:
POST - Path:
/auth/logout - 認証: 必要(Bearerトークン)
ハンドラー: logout, logoutTerminator
バリデーター: isAuthenticated
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.logoutRoute);
refreshTokenRoute
有効なリフレッシュトークンを使用してアクセストークンを更新します。
目的: リフレッシュトークンから新しいアクセストークンを生成
ルート詳細:
- Method:
POST - Path:
/auth/token/refresh - 認証: 不要
ハンドラー: refreshToken
バリデーター: なし
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.refreshTokenRoute);
checkTokenRoute
アクセストークンをバリデーションしてそのステータスを返します。
目的: トークンの真正性とステータスをバリデーション
ルート詳細:
- Method:
POST - Path:
/auth/token/check - 認証: 不要
ブロック: checkToken - 純粋なビジネスロジックを使用してトークンをバリデーション
バリデーター: なし
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.checkTokenRoute);
deleteRefreshTokensRoute
DELETE /auth/:identityId/refresh-tokens経由で特定のアイデンティティのリフレッシュトークンを削除します。
目的: アイデンティティ管理とセキュリティのためにリフレッシュトークンを削除
ルート詳細:
- Method:
DELETE - Path:
/auth/:identityId/refresh-tokens - 認証: 必要(Bearerトークン)
ブロック: softDeleteRefreshTokens - アイデンティティのリフレッシュトークンをソフト削除
バリデーター: isAuthenticated, some(checkIdentityType(['admin']), isSelf(['params', 'requestBody', 'identityId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.deleteRefreshTokensRoute);
loginWithOnetimeTokenRoute
パスワードレス安全なログインのためのワンタイムトークン認証。
目的: ワンタイムトークンをバリデーションし、パスワードレス認証フローを完了
ルート詳細:
- Method:
POST - Path:
/auth/ott/login - 認証: 不要(ワンタイムトークンを使用)
ハンドラー:
loginWithOnetimeToken: トークンをバリデーションしてアイデンティティを取得invalidateOneTimeToken: トークンを使用済みとしてマーク(ワンタイム使用)createAccessToken: JWTアクセストークンを生成createRefreshToken: JWTリフレッシュトークンを生成setResponseCookie: HTTP専用リフレッシュトークンCookieを設定
バリデーター: なし
リクエストボディ:
{
"token": "encrypted-onetime-authentication-token"
}
レスポンス (成功):
{
"id": "identity-uuid",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
エラーレスポンス:
- 403 Forbidden: この操作に対してトークンが正しくない、無効なターゲット、または既に使用済み
- 404 Not Found: アイデンティティが見つからない
- 500 Internal Server Error: 認証中に予期しないエラー
処理プロセス:
- ワンタイムトークンがデータベースに存在することをバリデーション
- JWTトークン構造を復号化して検証
- トークンタイプが
'onetime'であることを確認 - トークンターゲットが
'login'であることを確認 - トークンデータからアイデンティティを取得
- トークンを無効化(ワンタイム使用)
- アクセスとリフレッシュトークンを生成
- リフレッシュトークンCookieを設定
- 認証トークンを返す
主な機能:
- マジックリンク経由のパスワードレス認証
- ワンタイムトークン使用(自動的に無効化)
- タイプとターゲットチェックを含む安全なトークンバリデーション
- 標準ログインと同じトークン構造を返す
- トークンデータからのアイデンティティ検索
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.loginWithOnetimeTokenRoute);
// Typical magic link flow:
// 1. Generate one-time token with target: 'login' and identityId
// 2. Send magic link email with token
// 3. User clicks link → client submits POST /auth/ott/login with token
// 4. System validates and returns authentication tokens
マジックリンクフロー:
User Server
| |
| Request magic link |
| (separate endpoint) |
|------------------------>|
| | - Generate OTT token
| | - Store token in DB
| Magic link email | - Send email
|<------------------------|
| |
| Click link in email |
| |
| POST /auth/ott/login |
| { token } |
|------------------------>|
| | - Validate token
| | - Get identity
| | - Invalidate token
| { accessToken, ... } | - Generate auth tokens
|<------------------------|
generateOnetimeTokenRoute
認証目的で新しいワンタイムトークンを生成します。
目的: 認証用のOTTを作成(管理者のみ)
ルート詳細:
- Method:
POST - Path:
/auth/ott/generate - 認証: 必要(Bearerトークン)
ハンドラー: generateOnetimeToken
バリデーター: isAuthenticated, checkIdentityType(['admin'])
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.generateOnetimeTokenRoute);
restoreOnetimeTokenRoute
以前に無効化されたワンタイムトークンを復元します。
目的: 無効化されたOTTを再有効化(管理者のみ)
ルート詳細:
- Method:
POST - Path:
/auth/ott/restore - 認証: 必要(Bearerトークン)
ハンドラー: restoreOnetimeToken
バリデーター: isAuthenticated, checkIdentityType(['admin'])
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.restoreOnetimeTokenRoute);
invalidateOnetimeTokenRoute
既存のワンタイムトークンを無効化します。
目的: アクティブなOTTを無効化(管理者のみ)
ルート詳細:
- Method:
POST - Path:
/auth/ott/invalidate - 認証: 必要(Bearerトークン)
ハンドラー: invalidateOnetimeToken
バリデーター: isAuthenticated, checkIdentityType(['admin'])
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.invalidateOnetimeTokenRoute);
sendVerificationEmailRoute
ユーザーに確認メールを送信します。
目的: メール確認プロセスをトリガー
ルート詳細:
- Method:
POST - Path:
/auth/:identityId/send-verification-email - 認証: 必要(Bearerトークン)
ハンドラー: sendVerificationEmail, sendVerificationEmailTerminator
バリデーター: isAuthenticated, some(checkIdentityType(['admin']), isSelf(['params', 'requestParams', 'identityId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.sendVerificationEmailRoute);
confirmEmailRoute
確認トークンを使用してユーザーのメールアドレスを確認します。
目的: メール確認トークンを処理
ルート詳細:
- Method:
POST - Path:
/auth/confirm-email - 認証: 不要
ハンドラー: buildCheckConfirmEmailTokenPayload, checkToken, confirmEmail, confirmEmailTerminator
バリデーター: なし
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.confirmEmailRoute);
changeEmailRoute
新しいアドレスに確認メールを送信してユーザーのメール変更プロセスを開始します。
目的: トークン生成とメール送信を含むメール変更の開始を処理
ルート詳細:
- Method:
PATCH - Path:
/auth/:identityId/change-email - 認証: 必要(Bearerトークン)
ブロック:
assertIdentityExists- アイデンティティが存在することを確認checkEmailIsUniqueInIdentities- メールの一意性をバリデーションgetFingerprint- リクエストフィンガープリントを抽出buildTokenVerification- セキュリティコンテキストを構築generateOneTimeToken- 安全なトークンを生成storeOneTimeToken- トークンをデータベースに保存sendEmail- 確認メールを送信normalizeEmptyBody- レスポンスを正規化
バリデーター: isAuthenticated, some(checkIdentityType(['admin']), isSelf(['params', 'requestParams', 'identityId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.changeEmailRoute);
confirmNewEmailRoute
ワンタイム確認トークンを使用してユーザーの新しいメールアドレスを確認します。
目的: トークンバリデーションを含むメール変更確認を処理
ルート詳細:
- Method:
POST - Path:
/auth/confirm-new-email - 認証: 不要
ブロック:
getFingerprint- リクエストフィンガープリントを抽出buildTokenVerification- セキュリティコンテキストを構築checkOneTimeToken- トークンをバリデーションassertValidOneTimeTokenExists- トークンが存在することを確認invalidateOneTimeToken- トークンを使用済みとしてマークcheckEmailIsUniqueInIdentities- メールの一意性をバリデーションisEmail- メールフォーマットをバリデーションbuildUpdateIdentityEmailAndEmailVerifiedPayload- 更新ペイロードを構築updateIdentity- ユーザーアイデンティティを更新normalizeEmptyBody- レスポンスを正規化
バリデーター: なし
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.confirmNewEmailRoute);
sendResetPasswordLinkEmailRoute
ユーザーのメールアドレスに基づいてパスワードリセットリンクメールを送信します。
目的: パスワードリセットメールの生成と送信を処理
ルート詳細:
- Method:
POST - Path:
/auth/send-reset-password-link-email - 認証: 不要
ブロック:
getIdentityIdByEmail- メールでアイデンティティを取得getFingerprint- リクエストフィンガープリントを抽出buildTokenVerification- セキュリティコンテキストを構築generateOneTimeToken- 安全なトークンを生成storeOneTimeToken- トークンをデータベースに保存sendEmail- パスワードリセットメールを送信normalizeEmptyBody- レスポンスを正規化
バリデーター: なし
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Register route with Express app
app.use('/api', routes.sendResetPasswordLinkEmailRoute);
changePasswordRoute
PATCH /auth/:identityId/change-password経由でユーザーパスワードを変更します。
目的: 現在のパスワード確認と新しいパスワードハッシュ化を含むパスワード変更を処理
ルート詳細:
- Method:
PATCH - Path:
/auth/:identityId/change-password - 認証: 必要(Bearerトークン)
ブロック:
getIdentityById- IDでアイデンティティを取得compareStringAgainstHash- 現在のパスワードを確認hash- 新しいパスワードをハッシュ化buildUpdateIdentityPasswordPayload- 更新ペイロードを構築updateIdentity- データベースのアイデンティティパスワードを更新sendEmail- 通知メールを送信normalizeEmptyBody- レスポンスボディを正規化orThrow- マッピングされたエラーをスローするか、正規化されたアイデンティティを返す
バリデーター: isAuthenticated, some(checkIdentityType(['admin']), isSelf(['params', 'requestParams', 'identityId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const changePasswordFeature = compose(changePasswordSchema, changePasswordRoute);
// Register route with Express app
app.use('/api', routes.changePasswordRoute);
activateRoute
POST /auth/activate経由でユーザーアカウントを有効化します。
目的: メール確認とアイデンティティステータス更新を含むアカウント有効化を処理
ルート詳細:
- Method:
POST - Path:
/auth/activate - 認証: 必要(Bearerトークン)
ブロック:
getIdentityById- IDでアイデンティティを取得isEmailVerified- メールが確認されているかチェックbuildUpdateIdentityActivatedPayload- 有効化ペイロードを構築updateIdentity- アイデンティティを有効化として更新normalizeEmptyBody- レスポンスボディを正規化orThrow- マッピングされたエラーをスローするか、204 No Contentを返す
バリデーター: isAuthenticated, checkIdentityType(['admin'])
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const activateFeature = compose(activateSchema, activateRoute);
// Register route with Express app
app.use('/api', routes.activateRoute);
deactivateRoute
POST /auth/deactivate経由でユーザーアイデンティティを無効化します。
目的: メール確認、アイデンティティステータス更新、トークン無効化を含むアカウント無効化を処理
ルート詳細:
- Method:
POST - Path:
/auth/deactivate - 認証: 必要(Bearerトークン)
ブロック:
getIdentityById- IDでアイデンティティを取得isEmailVerified- メールが確認されているかチェックbuildUpdateIdentityDeactivatedPayload- 無効化ペイロードを構築updateIdentity- アイデンティティを無効化として更新softDeleteRefreshTokens- アイデンティティのリフレッシュトークンをソフト削除extractTokenFromAuthorizationHeader- リクエストからBearerトークンを抽出checkToken- アクセストークンとユーザーパーミッションをバリデーションsendEmail- 無効化通知メールを送信normalizeEmptyBody- レスポンスボディを正規化orThrow- マッピングされたエラーをスローするか、204 No Contentを返す
バリデーター: isAuthenticated, some(checkIdentityType(['admin']), isSelf(['params', 'requestParams', 'identityId']))
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Use in feature composition:
export const deactivateFeature = compose(deactivateSchema, routes.deactivateRoute);
// Register route with Express app
app.use('/api', routes.deactivateRoute);
completePasswordResetRoute
トークンをバリデーションしてユーザーのパスワードを更新することで、パスワードリセットプロセスを完了します。
目的: トークンバリデーションとパスワード更新を含むパスワードリセット完了を処理
ルート詳細:
- Method:
POST - Path:
/auth/reset-password - 認証: 不要
ブロック:
getResetPasswordTokenTarget- リセットパスワードトークンターゲットを取得getFingerprint- リクエストフィンガープリントを抽出buildTokenVerification- セキュリティコンテキストを構築extractTokenFromAuthorizationHeader- リクエストからBearerトークンを抽出checkOneTimeToken- ワンタイムトークンをバリデーションassertValidOneTimeTokenExists- トークンがデータベースに存在することを確認invalidateOneTimeToken- トークンを使用済みとしてマークhash- 新しいパスワードをハッシュ化buildUpdateIdentityPasswordPayload- パスワード更新ペイロードを構築updateIdentity- 新しいパスワードでユーザーアイデンティティを更新getIdentityById- 更新されたアイデンティティを取得sendEmail- パスワードリセット成功メールを送信normalizeEmptyBody- レスポンスボディを正規化orThrow- マッピングされたエラーをスローするか、204 No Contentを返す
バリデーター: なし
使用例:
import { routes } from '@nodeblocks/backend-sdk';
// Route registration:
app.use('/api', routes.completePasswordResetRoute);
// POST /auth/reset-password
// Headers:
// Authorization: Bearer <one-time-token>
// Request body:
// {
// "password": "newStrongPassword123"
// }
// Response: 204 No Content (success)