データの保護
クライアント認証とバックエンド機能を使用してデータへのアクセスを管理する
認証のセットアップが完了したので、Squid backend project を使ってデータの保護を開始できます。読み取り操作と書き込み操作の両方を、Squid Backend SDK の @secureCollection と @secureDatabase デコレーターを使って保護できます。
はじめに
生成された example-service.ts ファイルに移動し、次の関数を追加します。
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 を使用して backend project に変更をデプロイします。
squid deploy --apiKey YOUR_API_KEY --environmentId TARGET_ENVIRONMENT_ID
users コレクションからデータを読み取ろうとするクライアントは、データへアクセスするために認証されている必要があります。
// 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"
}
ここでは何が起きているのですか?
ここで、"middle tier" としての Squid が効いてきます。セキュリティ関数をデプロイしたので、クライアントが squid.collection('users').query を使ってクエリを実行するたびに、データが返される前に secureUsersRead 関数が呼び出されます。
この関数が true を返すとユーザーはデータにアクセスできますが、false を返すとユーザーは未認可 (unauthorized) と見なされ、リクエストは失敗します。isAuthenticated 呼び出しは、(前のステップで設定した)有効な auth ID token の存在を確認する、組み込みの Squid Backend SDK ユーティリティ関数です。token が存在しない場合、リクエストは失敗します。
上記は、Squid でバックエンド関数を書くことでデータを保護できる方法の一例にすぎません。これらの手順に従うことで、ユーザーの操作を認可する安全なバックエンドを作成できるようになります。