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

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 を追加します。

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 を使用して backend project に変更を deploy します。

squid deploy --apiKey YOUR_API_KEY --environmentId TARGET_ENVIRONMENT_ID

users collection から data を read しようとする client は、data に access するために authenticate されている必要があります。

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();
}

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 を作成できます。