Data の保護
client authentication と backend functionality を使用して data への access を管理します
authentication を setup したので、Squid backend project を使用して data の保護を開始できます。read と write の両方の operation は、Squid Backend SDK の @secureCollection および @secureDatabase decorator を使用して保護できます。security function は boolean を返します。true は request を許可し、false は拒否します。
開始するには
生成された example-service.ts file に移動し、次の function を追加します。
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 に変更を deploy します。
squid deploy --apiKey YOUR_API_KEY --environmentId TARGET_ENVIRONMENT_ID
users collection から data を read しようとする client は、data に access するために authenticate されている必要があります。
// 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();
}
client が authenticate されていない場合、users collection から data を read しようとすると、次の detail を持つ Error が発生します。
{
"statusCode": 401,
"message": "UNAUTHORIZED"
}
ここで何が起きているのでしょうか?
ここで Squid が「middle tier」として機能します。security function を deploy すると、client が squid.collection('users').query を使用して query を実行するたびに、data が返される前に secureUsersRead function が呼び出されます。
function が true を返す場合、user は data に access できます。一方、function が false を返す場合、user は unauthorized と見なされ、request は失敗します。isAuthenticated call は、valid auth ID token(前の step で設定したもの)の存在を確認する built-in Squid Backend SDK utility function です。token が存在しない場合、request は失敗します。
上記は、Squid で backend function を記述して data を保護する方法の 1 つの例にすぎません。これらの step に従うことで、user action を authorize する安全な backend を作成できます。