我对添加自定义声明的功能有疑问(我怀疑)。这是代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.addAdminRole = functions.https.onCall((data)=> {
//get user and add custom claim (admin)
return admin.auth().getUserByEmail(data.email).then(user => {
return admin.auth().setCustomUserClaims(user.uid, {
admin: true
});
}).then( () => {
return {
message: `Success! ${data.email} has been made an admin`,
}
})
})
我使用以下代码调用该函数(我使用Redux和React):
let addAdminRole = window.firebaseFunctions.httpsCallable('addAdminRole');
addAdminRole({email:employee.email}).then(res => {
console.log(res)
})
我收到了预期的消息({message:Success! ${data.email} has been made an admin
}),但未添加声明。
我通过axios制作了一个单独的Firebase Auth REST API进行身份验证,但是声称“ admin”不存在。
我有一个Spark(免费)计费计划,当检查Firebase功能的日志时,我看到“未配置计费帐户。无法访问外部网络,并且配额受到严格限制。执行addAdminRole时,配置帐单帐户以消除这些限制。
据我所读,这是一条消息,告诉您您始终可以享受免费计划,访问内部(google)信息应该没有问题。
这是axios请求的代码:
axios({
method:'post',
url:urlAuth,
data:{
email:employee.email,
password:employee.password,
returnSecureToken: true
}
}).then(res => {
delete employee.password;
console.log(res)
const expirationDate = new Date().getTime() + res.data.expiresIn * 1000;
localStorage.setItem('token',res.data.idToken);
localStorage.setItem('expirationDate',expirationDate);
localStorage.setItem('userId', res.data.localId);
localStorage.setItem('admin', res.data.admin)
dispatch(checkAuthTimeout(res.data.expiresIn));
if(logIn){
dispatch(endAuth(res.data.idToken,res.data.localId,res.data.admin));
}else{
employee.userId = res.data.localId;
dispatch(addEmplRegister(employee,res.data.idToken,admin));
}
}).catch(err => {
dispatch(errorAuth(err.message))
})
发现了问题,使用REST API身份验证时不会传输有关声明的信息
答案 0 :(得分:0)
设置具有现有JWT令牌的用户的自定义声明不会立即生效。这些用户将必须:
然后,他们的新令牌将显示自定义声明。