Javascript 在移动登录时丢失Firebase自定义声明
我在Firebase中使用自定义声明来设置管理员和组织id,以帮助我进行授权和多租户 最近我注意到,自定义声明正在被清除,毫无理由地变得未定义 在分析问题并试图重现它时,我注意到当用户注销并使用移动设备登录时,自定义声明被设置为未定义 这种行为可能发生在注销和登录web时,但我还无法在web上重现 我使用前端视图来管理和设置admin和organizationId自定义声明值,并调用后端云函数来实现这一点。这工作正常,值设置良好。但是,当用户注销并在手机上登录时,这些自定义声明将变得未定义,正如我通过前面提到的前端视图所看到的那样 步骤Javascript 在移动登录时丢失Firebase自定义声明,javascript,firebase,firebase-authentication,Javascript,Firebase,Firebase Authentication,我在Firebase中使用自定义声明来设置管理员和组织id,以帮助我进行授权和多租户 最近我注意到,自定义声明正在被清除,毫无理由地变得未定义 在分析问题并试图重现它时,我注意到当用户注销并使用移动设备登录时,自定义声明被设置为未定义 这种行为可能发生在注销和登录web时,但我还无法在web上重现 我使用前端视图来管理和设置admin和organizationId自定义声明值,并调用后端云函数来实现这一点。这工作正常,值设置良好。但是,当用户注销并在手机上登录时,这些自定义声明将变得未定义,正如
doLogin(value){
let t = this;
return new Promise<any>((resolve, reject) => {
localStorage.removeItem("user");
firebase.auth().signInWithEmailAndPassword(value.email, value.password)
.then(res => {
var user = firebase.auth().onAuthStateChanged(function(user){
if (user) {
t.setUser(user);
resolve(user);
} else {
reject('No user logged in');
}
})
resolve(res);
}, err => reject(err))
})
}
setUser(user: any){
let u: FirebaseUserModel = new FirebaseUserModel();
u.image = user.photoURL;
u.name = user.displayName;
u.provider = user.providerData[0].providerId;
u.email = user.email;
u.uid = user.uid;
user.getIdTokenResult().then ((idTokenResult) => {
console.log(idTokenResult.claims)
u.admin = idTokenResult.claims.admin? true: false;
u.organizationId = idTokenResult.claims.organization;
})
}
doLogout(){
return new Promise((resolve, reject) => {
if(firebase.auth().currentUser){
//this.afAuth.auth.signOut();
this.afAuth.signOut();
resolve();
}
else{
reject();
}
});
}
我不清楚你说的“清除”是什么意思。客户端应用程序代码根本无法影响自定义声明中设置的值。这只能使用特权后端代码进行更改。请编辑问题,以便更清楚地解释你所观察到的情况,以及这与你所期望的情况有何不同。嗨,道格。谢谢你的快速回答。当我说“清除”时,我的意思是自定义声明变得不明确。我使用前端视图来管理和设置admin和organizationId自定义声明值,并调用后端云函数来实现这一点。这很好,并且值设置得很好。但是,当用户注销并在手机上登录时,这些自定义声明将变得未定义,正如我在前面提到的前端视图中所看到的。为什么您希望用户注销后可以使用自定义声明?当用户注销时,有关该帐户的所有信息都将从客户端应用程序中清除,直到他们再次登录。对不起,我不清楚。我不希望在用户注销后使用自定义声明。问题是,当用户再次登录时,我必须检查organizationId以及他是否是管理员用户,但自定义声明未定义。在注销之前,自定义声明已设置好。然后用户注销,所有内容都从客户端应用程序中清除。但是当用户再次登录时,自定义声明是未定义的。这是您应该在问题本身中解释的所有信息。我建议编辑它,一步一步地解释你在做什么,以及结果如何不同于你的预期。