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

データの保護

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

認証の設定が完了したので、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 {
/** Checks whether the user is authenticated */
return this.isAuthenticated();
}
}

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

squid deploy --apiKey YOUR_API_KEY --environmentId TARGET_ENVIRONMENT_ID

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

Client code
// This function will throw an error if the user is not authenticated
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でバックエンド関数を記述することによりデータを保護する一例にすぎません。これらの手順に従うことで、ユーザーのアクションを認可する安全なバックエンドを作成できるようになります。