[]
        
(Showing Draft Content)

Snapshot 인증

Snapshot 클래스는 웹 클라이언트 라이브러리를 사용하므로 해당 인증 메커니즘에 의존합니다. 웹 클라이언트 라이브러리는 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' 컬렉션에는 데이터베이스에 쓰기 권한이 있는 사용자의 이메일이 포함되어 있습니다.


OAuth2 클래스를 사용하여 사용자를 인증할 수 있습니다. 이전에 Firestore 클래스를 사용할 때와 마찬가지로 사용할 수 있으며, 다른 점은 웹 클라이언트 라이브러리를 사용할 때 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' 컬렉션에 이메일이 포함된 경우)