Как использовать admin.auth (). CreateUser () с хешированным паролем в облачных функциях? - PullRequest
0 голосов
/ 20 марта 2019

Я создаю веб-приложение, используя 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 для хеширования пароля на стороне клиента и аналога для его восстановления на стороне сервера?

Я искал ответы в интернете, но ничего не нашел по этой теме, так что может быть, это абсолютно неправильный способ хеширования пароля?И если да, что является хорошей практикой в ​​таких случаях?

...