Default Adapter
デフォルトアダプタはMongoDBを簡単なドキュメント保存レイヤーとして使用して、ユーザー、招待、ユーザー設定などを実装しています。
機能
- ユーザーの作成、削除、更新、一覧
- メール、パスワード、TypeIdなどの情報に基づいて、ユーザーを作成などをします
- TypeIdはシステムへの権限を決めています
- メール、パスワード、TypeIdなどの情報に基づいて、ユーザーを作成などをします
- メール検証、パスワードのリセット
- 検証メールを送信、フロントエンドと連携し、メールを検証します
- リセットパスワードメール送信
- ユーザーの招待
- 招待メールの送信
- ユーザー添付資料管理
- ユーザーが安全に添付資料をアップロード、管理、ダウンロードできます
- ユーザーフォロー管理
- ユーザーをフォローやアンフォロー、フォロワーを一覧
インストール手順
- 前提条件
パッケージ | バージョン |
---|---|
node | 18+ |
MongoDB | 5+ |
Nodeblocks Auth Service | 1.1.0+ |
Nodeblocks Organization Service | 1.1.0+ |
- パッケージをインストール
リポジトリを作成して、このパッケージを追加
mkdir my-user-service
npx gts init -y
npm install --save @basaldev/blocks-user-service
環境関数を設置する必要があります。クイックスタートガイドをサンプルとして参照してください。
- コードを導入
備考
下記の例は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
エンドポイントを呼び出すと、トークンが有効であれば、サービスはemailVerified
をtrue
に設定します。
サンプルプロジェクトのTantyでは、以下のようなワークフローになります。
- ユーザーが
POST /users
エンドポイントを使用してアカウントを作成します。 - このアダプタがユーザーのメールアドレスにメールを送信し、Tantyフロントエンドの
/waiting-for-verify
ページへのリンクと、一度限りのトークンを含みます。 - フロントエンドが一度限りのトークンを使用して、メール認証のためにユーザーサービスの
POST /verify-email
エンドポイントにリクエストを送信します。 - ユーザーサービスがトークンを検証し、ユーザーの
emailVerified
をtrue
に設定します。
エンドポイントの仕様について、OpenAPI Documentを参考してください。