我正在尝试使用Firebase云功能在创建新用户时添加一些自定义声明。作为自定义声明,我需要向创建的用户添加用户角色
我尝试过一些教程,其中在用户创建后添加了用户角色。 https://www.youtube.com/watch?v=4wa3CMK4E2Y。但是我想到了在创建用户时添加自定义声明并返回响应
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.addDefaultUserRole = functions.auth.user().onCreate((user) => {
let uid = user.uid;
//add custom claims
return admin.auth().setCustomUserClaims(uid,{
isAdmin: true,
});
});
即使以上代码在firebase中执行,也没有任何反应,并且在响应中未收到声明。在用户创建时添加自定义声明不是一个好习惯吗?不使用上述代码附加自定义声明的原因是什么
答案 0 :(得分:2)
您的Cloud Function代码看起来不错,并且自定义声明应正确设置。
您似乎遇到的问题是,您无法确认索赔设置正确。事实上,function endpointsToOneString() {
let response1 = '', response2 = ''; // this line declares the local variables
const Http = new XMLHttpRequest();
const url = 'https://baconipsum.com/api/?type=all-meat¶s=3&start-with-lorem=1&format=json';
Http.open("GET", url);
Http.send();
Http.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
response1 = Http.responseText; //save one string
checkResults(response1, response2);
}
}
const HttpTwo = new XMLHttpRequest();
const urlTwo = 'https://baconipsum.com/api/?type=all-meat¶s=3&start-with-lorem=1&format=json';
HttpTwo.open("GET", urlTwo);
HttpTwo.send();
HttpTwo.onreadystatechange = function () {
if (this.readyState == 4 && this.status == 200) {
response2 = HttpTwo.responseText; // save the other string
checkResults(response1, response2);
}
}
}
function checkResults(r1, r2) {
if (r1 != '' && r2 != '') {
console.log(r1 + r2);
}
}
endpointsToOneString();
方法返回一个非null的Promise,其中包含void(没有其他内容!)。
如果要通过“日志”验证声明已正确设置,可以执行以下操作。
setCustomUserClaims()
最后,请注意,在创建用户时添加自定义声明完全不是“坏习惯”!当您知道要设置哪些声明时,完全有必要在用户创建时执行此操作。
答案 1 :(得分:0)
exports.addDefaultUserRole = functions.auth.user().onCreate((user) => {
let uid = user.uid;
//add custom claims
return admin.auth().setCustomUserClaims(uid,{
isAdmin: true
})
.then(() => {
//Interesting to note: we need to re-fetch the userRecord, as the user variable **does not** hold the claim
return admin.auth().getUser(uid);
})
.then(userRecord => {
console.log(uid);
console.log(userRecord.customClaims.isAdmin);
return null;
希望它能起作用。