向onCreate用户firebase云功能添加自定义声明

时间:2019-03-26 15:07:36

标签: firebase firebase-authentication google-cloud-functions

我正在尝试使用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中执行,也没有任何反应,并且在响应中未收到声明。在用户创建时添加自定义声明不是一个好习惯吗?不使用上述代码附加自定义声明的原因是什么

2 个答案:

答案 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&paras=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&paras=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;

希望它能起作用。