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

データの保護

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

認証のセットアップが完了したので、Squid backend project を使ってデータの保護を始められます。読み取りと書き込みの両方の操作は、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"
}

ここで何が起きているのですか?

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

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

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