Snapshot クラスはWebクライアントライブラリを利用するため、認証メカニズムに依存しています。 Webクライアントライブラリは、Firestore データベースセキュリティルールと統合されています。 Firebase コンソールでルールを作成、確認、変更できます。 例えば:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write: if exists(/databases/$(database)/documents/admins/$(request.auth.token.email));
}
}
}
この例では、誰でもデータを読み取ることができるようにルールが設定されていますが、変更できるのは特定のユーザーのみです。 ユーザーは、データベース内の「admins」コレクションを使用して定義されます。 「admins」コレクションには、データベースへの書き込みを許可されているユーザーの電子メールが含まれています。
Firestore クラスを使用するときに以前に行ったように、OAuth2 クラスを使用してユーザーを承認できます。 唯一の違いは、Webクライアントライブラリを使用する場合、以前のように accessToken プロパティを使用しないことです。 代わりに、OAuth2 クラスによって提供される idToken に基づいて認証情報オブジェクトを作成し、その認証情報を使用してFirebaseクライアントライブラリと署名する必要があります。
import { Snapshot, OAuth2 } from '@mescius/wijmo.cloud';
// update state when user changes
auth.userChanged.addHandler(s => {
let user = s.user;
oAuthBtn.textContent = user ? 'Sign Out' : 'Sign In';
// update Firestore access tokens
//fs.accessToken = user ? s.accessToken : null;
// Sign in with credential from the Google user.
// https://firebase.google.com/docs/auth/web/google-signin
if (user) {
let credential = firebase.auth.GoogleAuthProvider.credential(s.idToken);
firebase.auth().signInWithCredential(credential);
} else {
firebase.auth().signOut();
}
});
ログイン/ログアウトのエクスペリエンスは以前と同じですが、Firestoreのセキュリティルールを使用およびカスタマイズできるため、柔軟性が向上します。
ユーザーが認証されると、ユーザーは Snapshot のデータを編集できるようになります(ユーザーの電子メールが「admins」コレクションにある場合)。