ウェブサイト検索

Firebase + Typescript、ユーザーオブジェクトから accessToken を取得できませんか?


私のMobXストアでは、FirebaseのログインからaccessTokenを取得できないようです。ただし、データは明らかに存在しています。これはReact-Native用です。

サンプル:

class GlobalStore {

    @observable loggedIn: boolean;

    @observable user: any;

    @action firebaseStatup = () => {

        firebase.initializeApp({
            apiKey: "somestring",
            authDomain: "app.firebaseapp.com",
            databaseURL: "https://app.firebaseio.com",
            projectId: "app",
            storageBucket: "app.appspot.com",
            messagingSenderId: "1234
        });
        firebase.auth().onAuthStateChanged((user) => {
            this.loggedIn = !!user;
            if (user) {
                this.user = firebase.auth().currentUser;
                console.log(this.user); // Returns an Object that has property stsTokenManager.accessToken which is the JWT?
                console.log(this.user.stsTokenManager.accessToken)
            }
        })
    };

console.log(this.user); はユーザー情報がすべて含まれた大きなオブジェクトを出力します。stsTokenManager.accessToken には、トークンが存在します。

もし私がプロパティに直接アクセスしようとすると、次のエラーが返されます:

undefined is not an object (evaluating '_this.user.stsTokenManager.accessToken')

明らかに存在するaccessTokenをどうやって取得すればいいですか?

回答 #1

問題は、user がプロミスを返すことでした。私はそれを AsyncStorage に保存したかったので、こちらの方法を使いました:

// ... Firebase stuff

    firebase.auth().onAuthStateChanged((user) => {
        this.loggedIn = !!user;
        if (user) {
            this.user = firebase.auth().currentUser;
            user.getIdToken()
                .then(token => this.saveTokenToStorage(token))

        }
    });

@action async saveTokenToStorage(token: string) {
    try {
        await AsyncStorage.setItem('authentication', token);
    } catch (error) {
        // Error saving data
    }
};