【问题标题】:How to check firebase-auth user claims?如何检查 firebase-auth 用户声明?
【发布时间】:2020-06-19 11:58:39
【问题描述】:

致命异常:“尝试在空对象引用上调用虚拟方法 'boolean java.lang.Boolean.booleanValue()'”

下面是代码

authStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                user.getIdToken(false).addOnSuccessListener(new OnSuccessListener<GetTokenResult>() {
                    @Override
                    public void onSuccess(GetTokenResult result) {
                        boolean isDriver = (boolean) result.getClaims().get("driver");
                        boolean isStudent = (boolean) result.getClaims().get("verified");
                        if (isDriver) {
                            // Show driver UI.
                            showDriverUI();
                        }else if(isStudent) {
                            // Show student UI.
                            showStudentUI();
                        }else {
                            // Show regular user UI.
                            firebaseAuth.signOut();
                            Snackbar.make(login, "Please confirm your identity, contact KIU Transport Office", Snackbar.LENGTH_LONG).show();
                        }
                    }
                });



            } else {
                // User is signed out
                Log.d(TAG, "onAuthStateChanged:signed_out");
            }
        }
    };

我还尝试通过 cloud-function onCreate 触发器将它们设置为 false, 这是云功能代码

exports.defaultClaims = functions.auth.user().onCreate((user) => {

    const email = user.email; // The email of the user.

    return admin.setCustomUserClaims(user.uid, {
        admin: false,
        clerk: false,
        driver: false,
        verified: false
    }).then(function () {
        return {
            message: `Successfully default role has been added for ${email}`
        }
    }).catch(function (err) {
        return err;
    });

});

【问题讨论】:

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


    【解决方案1】:

    错误消息告诉您自定义声明中的值之一不存在。您的代码应该检查 null 并检查类型,而不是盲目地转换为布尔值:

    Object driver = result.getClaims().get("driver");
    if (driver != null && driver instanceof Boolean) {
        boolean isDriver = ((Boolean) driver).booleanValue();
    }
    

    另外,如果您想强制刷新包含任何自定义声明的 ID 令牌,您应该将 true 传递给 getIdToken:

    user.getIdToken(true)
    

    【讨论】:

    • 对象驱动 = result.getClaims().get("driver"); if (driver instanceof Boolean) { boolean isDriver = (Boolean) driver; if (isDriver) { // 显示驱动程序 UI。显示驱动程序UI(); } }
    • 通过上述更改,我已经实现了我的目标......谢谢兄弟
    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 2018-12-16
    • 2018-06-11
    • 2018-11-15
    • 1970-01-01
    • 2020-01-20
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多