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
}
};
