[]
인증을 위해 Firestore REST API는 Firebase Authentication ID 토큰 또는 Google Identity OAuth 2.0 토큰 중 하나를 허용합니다.
Firebase ID 토큰을 사용하는 경우, Firestore는 Cloud Firestore 보안 규칙을 사용하여 요청이 승인되었는지 판단합니다. 이 옵션은 Firestore Security Rules(더 유연하고 강력)을 활용하므로 Snapshot 클래스에서 지원하는 유일한 옵션이기 때문에 권장됩니다.
Google Identity OAuth 2.0 토큰을 사용하는 경우, Firestore는 Cloud Identity와 Access Management (IAM)를 사용하여 요청이 승인되었는지 판단합니다. 이 옵션은 Firestore Security Rules을 우회하고 IAM 관리자가 부여한 권한을 사용합니다. 이는 GoogleSheet 클래스에서 사용하는 인증 방식과 유사합니다.
이번 예시에서 Firebase ID 토큰을 사용할 것입니다.
먼저 Firestore와 OAuth2 클래스를 가져와야 합니다:
import { Firestore, OAuth2 } from '@grapecity/wijmo.cloud';
그 다음, 생성한 Firebase ID 토큰을 사용하여 OAuth2 객체를 생성합니다:
const CLIENT_ID = '60621001861-h0u4ek4kmd3va9o2bubhq9ean0bgrhu2.apps.googleusercontent.com';
const SCOPES = [ 'https://www.googleapis.com/auth/userinfo.email' ];
let auth = new OAuth2(API_KEY, CLIENT_ID, SCOPES);
// button to log in/out
let oAuthBtn = document.getElementById('auth_btn');
// click button to log user in or out
oAuthBtn.addEventListener('click', () => {
if (auth.user) {
auth.signOut();
} else {
auth.signIn();
}
});
인증을 완료하려면, 사용자가 변경될 때 idToken 을 Firestore 객체에 적용해야 합니다 (OAuth2 토큰을 사용할 경우 accessToken 속성을 설정하면 됩니다):
// update button/sheet state when user changes
auth.userChanged.addHandler(s => {
let user = s.user;
// update button caption
oAuthBtn.textContent = user ? 'Sign Out' : 'Sign In';
// update Firestore ID token
fsNWind.idToken = user ? s.idToken : null;
});