5.20241.9

スナップショット:認証

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」コレクションにある場合)。