我正在使用来自javascript客户端的Firebase身份验证进行测试,并且我尝试使用retrieve id tokens on clients documentation检索idToken
我想我忘记了一些基本的东西。
用户使用Google登录
代码只是在其他帖子和文档中看到的。结果在评论中。
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log(user); // this is shown. Firebase user and provider data
console.log(user.uid); // Shown
firebase.auth().user.getIdToken().then(function(idToken) {
console.log(idToken+'--'); // Nothing happens. No errors and the function not continues
});
console.log(user.uid); // Nothing happens
}
})
由于
修改
如果我添加任何错误,也没有任何反应。例如,如果我添加警报它会显示警报,但如果我有错误,例如alter()没有显示任何错误。添加了捕获而没有任何内容
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
alter() // Nothing happens and the function stop
console.log(user); // this is shown. Firebase user and provider data
console.log(user.uid); // Shown
firebase.auth().user.getIdToken().then(function(idToken) {
console.log(idToken+'--'); // Nothing happens. No errors and the function not continues
}).catch(function(error) {
console.log(error+'--'); // Nothing
});
console.log(user.uid); // Nothing happens
}
})
答案 0 :(得分:2)
firebase.auth().user
在那一刻还没有user
。您必须直接使用user
中的firebase.auth().onAuthStateChanged
:
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log(user); // It shows the Firebase user
console.log(firebase.auth().user); // It is still undefined
user.getIdToken().then(function(idToken) { // <------ Check this line
console.log(idToken); // It shows the Firebase token now
});
}
});
您只能在firebase.auth().user
完成后且在其范围之外使用firebase.auth().onAuthStateChanged
,否则将不确定。
答案 1 :(得分:0)
firebase.auth()。currentUser是同步的。我们可以通过订阅auth observable使其异步。
取决于我们使用的库,JavaScript SDK具有onAuthStateChanged(),而AngularFire2具有authState()onAuthStateChanged()。
// For AngularFire:
private afAuth: AngularFireAuth,
afAuth.authState.subscribe(user => {
if (user) {
user.getIdToken(true).then(idToken => {
// ...
});
}
});
// or
this.afAuth.auth.onAuthStateChanged(user => {
if (user) {
user.getIdToken(true).then(idToken => {
//...
});
}
});
// For the JS SDK
firebase.auth().onAuthStateChanged(user => {
if (user) {
user.getIdToken(true).then(idToken => {
// ...
});
}
});