メインコンテンツまでスキップ

Default Adapter

デフォルトアダプタはMongoDBを簡単なドキュメント保存レイヤーとして使用して、ユーザー、招待、ユーザー設定などを実装しています。

機能

  • ユーザーの作成、削除、更新、一覧
    • メール、パスワード、TypeIdなどの情報に基づいて、ユーザーを作成などをします
      • TypeIdはシステムへの権限を決めています
  • メール検証、パスワードのリセット
    • 検証メールを送信、フロントエンドと連携し、メールを検証します
    • リセットパスワードメール送信
  • ユーザーの招待
    • 招待メールの送信
  • ユーザー添付資料管理
    • ユーザーが安全に添付資料をアップロード、管理、ダウンロードできます
  • ユーザーフォロー管理
    • ユーザーをフォローやアンフォロー、フォロワーを一覧

インストール手順

  1. 前提条件
パッケージバージョン
node18+
MongoDB5+
Nodeblocks Auth Service1.1.0+
Nodeblocks Organization Service1.1.0+
  1. パッケージをインストール

リポジトリを作成して、このパッケージを追加

mkdir my-user-service
npx gts init -y
npm install --save @basaldev/blocks-user-service

環境関数を設置する必要があります。クイックスタートガイドをサンプルとして参照してください。

  1. コードを導入
備考

下記の例はCookie認証のサンプルです:

authenticate: security.defaultCookieAuth, // <-- Cookie認証
備考

下記の例はCORSの許可リストにlocalhostを追加する例です。お使いになる予定のドメインを配列に追加してください。

corsOptions: {
credentials: true,
origin: ['http://localhost', 'http://your-domain.com'],
},

src/index.tsに下記を入れてください:

import 'dotenv/config';
import {
createNodeblocksUserApp,
defaultAdapter,
} from '@basaldev/blocks-user-service';
import {security, crypto} from '@basaldev/blocks-backend-sdk';
import {getEnvBool, getEnvString} from './helper/utilities';

async function main() {
const adapterOptions: defaultAdapter.UserDefaultAdapterOptions = {
authEncSecret: getEnvString('AUTH_ENC_SECRET', ''),
authSignSecret: getEnvString('AUTH_SIGN_SECRET', ''),
authenticate: security.defaultCookieAuth,
emailConfig: {
inviteUser: {
enabled: getEnvBool('INVITE_USER', false),
},
sendResetPasswordEmail: {
customerTemplate: {
bodyTemplate: '<p>Password Reset: <a href="\${url}">\${url}</a></p>',
subject: 'Password Reset',
urlTemplate:
'https://your-domain.com/auth/reset-password-submit/${token}',
},
enabled: getEnvBool('SEND_PASSWORD_RESET_EMAIL', false),
},
sender: getEnvString('SENDER', 'noreply@basal.dev'),
verifyEmail: {
customerTemplate: {
bodyTemplate: '<p>Verify Email: <a href="\${url}">\${url}</a></p>',
subject: 'Verify Email',
urlTemplate:
'https://your-domain.com/auth/verify-email-success/${token}',
},
enabled: getEnvBool('VERIFY_EMAIL', false),
},
verifyChangeEmail: {
customerTemplate: {
bodyTemplate: '<p>Verify Change Email: <a href="\${url}">\${url}</a></p>',
subject: 'Verify Change Email',
urlTemplate:
'https://your-domain.com/settings/verify-change-email-success/${token}',
},
enabled: getEnvBool('VERIFY_CHANGE_EMAIL', false),
},
deactivateUser: {
template: {
bodyTemplate: '<p>Deactivate user</p>',
subject: 'Deactivate User',
urlTemplate: '',
},
enabled: getEnvBool('DEACTIVATE_USER_EMAIL', false),
},
},
};

const adapter = await defaultAdapter.createUserDefaultAdapter(adapterOptions, {
authAPI: getEnvString('AUTH_ENDPOINT', ''),
db: getEnvString('DATABASE_URL', ''),
bucket: getEnvString('BUCKET_NAME', ''),
organizationAPI: getEnvString('ORGANIZATION_ENDPOINT', ''),
mailService: {
sendGridApiKey: getEnvString('SENDGRID_API_KEY', ''),
},
});

const app = createNodeblocksUserApp({
enableCookieParser: true,
corsOptions: {
credentials: true,
origin: ['http://localhost'],
},
});

await app.startService({
PORT: Number(getEnvString('PORT')),
adapter,
env: 'development',
});
}

void main();

メール検証

安全のためにユーザーがEmailを認証しないと、利用を制限されています。

Default Adapterにおいて、ユーザーがPOST /usersでアカウントを作成すると、emailVerifiedフィールドはfalseになり、システムはユーザーのメールアドレスに、メールアドレスを確認するためのURLと一度限りのトークンを含むメールを送信します。このトークンを使用して/verify-emailエンドポイントを呼び出すと、トークンが有効であれば、サービスはemailVerifiedtrueに設定します。

サンプルプロジェクトのTantyでは、以下のようなワークフローになります。

  1. ユーザーがPOST /usersエンドポイントを使用してアカウントを作成します。
  2. このアダプタがユーザーのメールアドレスにメールを送信し、Tantyフロントエンドの/waiting-for-verifyページへのリンクと、一度限りのトークンを含みます。
  3. フロントエンドが一度限りのトークンを使用して、メール認証のためにユーザーサービスのPOST /verify-emailエンドポイントにリクエストを送信します。
  4. ユーザーサービスがトークンを検証し、ユーザーのemailVerifiedtrueに設定します。

エンドポイントの仕様について、OpenAPI Documentを参考してください。

API参考資料