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

データの保護

クライアント認証とバックエンド機能を使用してデータへのアクセスを管理する

認証を設定したので、Squidバックエンドプロジェクトを使用してデータの保護を開始できます。読み取り操作も書き込み操作も、Squid Backend SDKの@secureCollectionおよび@secureDatabaseデコレーターを使用して保護することができます。

始めに

生成されたexample-service.tsファイルに移動し、以下の関数を追加してください:

Backend code
type User = { id: string; email: string; age: number };

export class ExampleService extends SquidService {
@secureCollection('users', 'read')
secureUsersRead(context: QueryContext<User>): boolean {
/** ユーザーが認証されているか確認します */
return this.isAuthenticated();
}
}

Squid CLIを使用して、バックエンドプロジェクトに変更をデプロイします:

squid deploy --apiKey YOUR_API_KEY --environmentId TARGET_ENVIRONMENT_ID

usersコレクションからデータを読み込もうとするクライアントは、データにアクセスするために認証されている必要があります。

Client code
// ユーザーが認証されていない場合、この関数はエラーをスローします
async function readUsers(squid: Squid): Promise<User[]> {
return await squid.collection<Users>('users').query().snapshot();
}

クライアントが認証されていない場合、usersコレクションからデータを読み込もうとする試みは、以下の詳細を持つErrorを返します:

{
"statusCode": 401,
"message": "UNAUTHORIZED"
}

ここで何が起こっているの?

ここで、Squidが「ミドルティア」として機能します。セキュリティ関数をデプロイしたことで、クライアントがsquid.collection('users').queryを使用してクエリを実行するたびに、データが返される前にsecureUsersRead関数が呼び出されます。

この関数がtrueを返すと、ユーザーはデータにアクセスできますが、falseを返すと、ユーザーは認可されていないと見なされ、リクエストが失敗します。isAuthenticated呼び出しは、前のステップで設定した有効なauth IDトークンの存在をチェックする、Squid Backend SDKの組み込みユーティリティ関数です。トークンが存在しない場合、リクエストは失敗します。

上記は、Squidでバックエンド関数を作成することにより、データを保護する方法の一例にすぎません。これらの手順に従うことで、ユーザーのアクションを認可する安全なバックエンドを作成することができます。