Я создаю веб-приложение, используя Angular для внешнего интерфейса и Cloud Functions для внутреннего интерфейса.Также используется Firebase Authentication для регистрации и входа в систему пользователей.Для сохранения данных я использую Cloud Firestore.
Регистровая часть используется в Cloud Functions.Там я вызываю admin.auth (). CreateUser (), чтобы установить учетные данные пользователя для пользователя Auth, а также для пользовательского документа, который я добавляю в Cloud Firestore.
Моя проблема в том, что я хэширую значение пароля на внешнем интерфейсе перед отправкой HTTP-запроса к функциям.Я делаю это из соображений безопасности.Но как я могу восстановить хеш, чтобы я мог записать необработанный пароль в createUser ()?
На самом деле я сохраняю хешированный пароль, и после этого я не могу войти в систему с созданным пользователем, потому что это хэшированное значение.
Моя функция в облаке Функции:
exports.createUser = async (req, res) => {
try {
const user = req.body;
console.log(user.password);
const userRecord = await admin.auth().createUser({
email: user.mail,
emailVerified: false,
password: user.password,
displayName: user.firstname + ' ' + user.lastname,
photoURL: "http://www.example.com/12345678/photo.png",
disabled: false
}).then(async (userRecord) => {
console.log(userRecord.password);
console.log(userRecord);
return await userCollection.doc(userRecord.uid).set({
uid: userRecord.uid,
firstname: user.firstname,
lastname: user.lastname,
photoURL: userRecord.photoURL,
dateOfBirth: user.dateOfBirth,
sex: user.sex,
city: user.city,
activities: user.activities,
offers: user.offers
})
})
console.log("Successfully created new user:");
return res.status(200).send(userRecord);
}
catch (error) {
console.log("Error creating new user:", error);
return res.send(false);
}
Хеширование во внешнем интерфейсе выглядит следующим образом (с использованием ts-md5):
password: Md5.hashStr(this.registerForm.value.registerFormPassword)
Есть ли методотменить хэш или метод из Firebase Auth для хеширования пароля на стороне клиента и аналога для его восстановления на стороне сервера?
Я искал ответы в интернете, но ничего не нашел по этой теме, так что может быть, это абсолютно неправильный способ хеширования пароля?И если да, что является хорошей практикой в таких случаях?