Firebase Auth setCustomClaims() 不起作用

Rit*_*ari 2 javascript jwt firebase firebase-authentication google-cloud-functions

我在为 Firebase 身份验证服务的令牌设置自定义声明时遇到问题。我正在使用云功能为 Hasura 设置自定义声明。云函数在新用户创建事件时执行以设置自定义声明。这是我在云函数中运行的代码

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();

exports.processSignup = functions.auth.user().onCreate(user => {
    // create custom claims for hasura
    const hasuraClaims = {
        "x-hasura-default-role": "user",
        "x-hasura-allowed-roles": ["user"],
        "x-hasura-user-id": user.uid
    }

    // attach claims to user auth object
    return admin.auth().setCustomUserClaims(user.uid, hasuraClaims)
        .then(_ => {
            functions.logger.info('SUCCESS: Custom claims attached');
        })
        .catch(err => {
            console.log('ERROR: ', err);
        })
})
Run Code Online (Sandbox Code Playgroud)

在我的前端网页中,我运行以下代码来获取idToken

// subscribe to user state change
firebase.auth().onAuthStateChanged(async user => {
    console.log('Firebase auth state changed');

    if (user) {
        // User is signed in.
        window.User = user;

        let idToken = await user.getIdTokenResult();
        console.log('idToken: ', idToken);
    }
})
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么,但令牌不包含我在 Cloud function 中设置的自定义声明processSignup()。我知道该函数执行时没有错误,因为我可以检查函数日志并找到信息条目SUCCESS: Custom claims attached

谁能帮我解决这个问题吗?

Mic*_*igh 5

更新声明不会触发(登录或未登录的onAuthStateChanged身份验证状态没有改变,但用户的声明发生了变化)并且令牌被铸造然后使用约1小时。

您正在调用getIdTokenResult但不强制刷新,请尝试:

let idToken = await user.getIdTokenResult(true);
Run Code Online (Sandbox Code Playgroud)

这将强制从服务器获取新令牌,并(希望)包含您的自定义声明。