Мне было интересно, может ли кто-нибудь мне помочь.
В настоящее время я создаю панель администратора, к которой могут обращаться только администраторы.Я использую React, Redux и Firebase.
Мне удалось настроить пользовательские требования для определенных пользователей в облачной функции, например, так:
exports.addSuperAdminRole = functions.https.onCall((data, context) => {
return admin.auth().getUserByEmail(data.email).then(user => {
return admin.auth().setCustomUserClaims(user.uid, {
superAdmin: true
})
}).then(() => {
return {
message: `Success! ${data.email} has been made an admin.`
}
}).catch(err => {
return err;
});
});
Я бы хотел ограничить доступ к панели инструментов.только для superAdmins, и мне было интересно, каков наилучший (самый безопасный) способ сделать это.
В настоящее время у меня работает следующее действие входа на стороне клиента, где я проверяю пользовательское утверждение и просто выходу пользователя из системы, еслиони не администраторы:
export const login = creds => {
return async (dispatch, getState, { getFirebase }) => {
const firebase = getFirebase();
try {
await firebase
.auth()
.signInWithEmailAndPassword(creds.email, creds.password);
const currentUser = firebase.auth().currentUser;
currentUser.getIdTokenResult().then(idTokenResult => {
console.log(currentUser);
currentUser.superAdmin = idTokenResult.claims.superAdmin;
if (!currentUser.superAdmin) {
console.log('is not admin');
firebase.logout();
}
});
} catch (error) {
console.log(error);
throw new SubmissionError({
_error: 'Login failed'
});
}
};
};
Это достаточно или мне нужно запустить облачную функцию при входе в систему, проверить заявки, а затем выйти из системы?Если да, то как бы это сделать?
Буду признателен за любую помощь, которую вы мне можете оказать!
Приветствия,
Джеймс