Как проверить утверждения пользователя firebase-auth? - PullRequest
0 голосов
/ 06 марта 2020

ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: «Попытка вызвать виртуальный метод» 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");
            }
        }
    };

Я также пытался установить их в false с помощью триггера onCreate облачной функции, вот код облачной функции

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;
    });

});

1 Ответ

1 голос
/ 06 марта 2020

Сообщение об ошибке сообщает, что одно из значений в пользовательских утверждениях не существует. Ваш код должен проверять наличие нуля и проверять тип вместо слепого приведения к логическому значению:

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

Кроме того, если вы хотите принудительно обновить refre sh токен ID, который содержит любые пользовательские утверждения, вы должны передать true для getIdToken:

user.getIdToken(true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...