Я использую Firebase auth для приложения, но как часть создания пользователя мне нужно установить некоторые пользовательские утверждения.
Я написал облачную функцию для установки утверждений когда пользователь создан:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
// On sign up.
exports.processSignUp = functions.auth.user().onCreate(user => {
let customClaims;
// Set custom user claims on this newly created user.
return admin.auth().setCustomUserClaims(user.uid, {
'https://hasura.io/jwt/claims': {
'x-hasura-default-role': 'user',
'x-hasura-allowed-roles': ['user'],
'x-hasura-user-id': user.uid
}
})
.then(() => {
// Update real-time database to notify client to force refresh.
const metadataRef = admin.database().ref("metadata/" + user.uid);
// Set the refresh time to the current UTC timestamp.
// This will be captured on the client to force a token refresh.
return metadataRef.set({
refreshTime: new Date().getTime()
});
})
.then(() => {
return admin.auth().getUser(user.uid);
})
.then(userRecord => {
console.log(userRecord);
return userRecord.toJSON();
})
.catch(error => {
console.log(error);
});
});
Когда я распечатываю на консоль userRecord, я вижу, что настраиваемые утверждения установлены правильно.
Затем во флаттере я получаю токен из созданного пользователь, но тогда кажется, что к нему не прикреплены пользовательские заявки.
Я использую этот код для создания пользователя и распечатки заявок в флаттере
Future<FirebaseUser> signUp({String email, String password}) async {
final FirebaseUser user = (await auth.createUserWithEmailAndPassword(
email: email,
password: password,
)).user;
IdTokenResult result = await (user.getIdToken(refresh: true));
print('claims : ${result.claims}');
return user;
}
Если я проверяю сам токен в отладчике jwt, который я вижу, у него нет пользовательских требований к нему. Неужели мне нужны дополнительные шаги, чтобы попытаться получить обновленный токен после того, как были установлены претензии? Я пробовал user.reload()
и user.getIdToken(refresh: true)
, но, похоже, они не помогают.
Есть идеи, как получить токен с пользовательскими утверждениями?