Оператор Else выполняется, даже если условия оператора If действительны - PullRequest
0 голосов
/ 05 января 2019

Я использую функцию Google Cloud для проверки своей аутентификации OTP, а также использую базу данных Firebase для сохранения кода в базе данных.

Моя проблема в том, что даже когда условие If выполняется, оно всегда выполняет оператор else. Я сравниваю code и codeValid из базы данных Firebase с пользовательским вводом. Таким образом, мой пользовательский ввод удовлетворен кодом и codevalid также удовлетворен, но он всегда перемещается в оператор else. Я не знаю почему.

Вот мой код

const admin = require('firebase-admin');

module.exports = function(req, res) {
if(!req.body.phone || !req.body.code) {
    return res.status(422).send({error: 'Phone and Code Must be 
Provided'});
 }

const phone = String(req.body.phone).replace(/[^\d]/g, '');
const code = parseInt(req.body.code);

return admin.auth().getUser(phone) 
    .then(() => {
        const ref = admin.database().ref('users/'+ phone);
       return ref.on('value', snapshot => {
            ref.off();
            const user = snapshot.val();

            if (user.code === code && user.codeValid === true) {
                ref.update({ codeValid: false });
                admin.auth().createCustomToken(phone)
                    .then(token => res.send({ token: token }))
                    .catch((err)=> res.status(422).send({ error:err }));
            }
            else {
                return res.status(422).send({ error: 'Code Not Valid' });
            }
        });
    })
    .catch((err)=> res.status(422).send({ error:err }) )
 } 

Итак, я всегда получаю "код не действителен", что бы я ни вводил. Я также перепроверил все значения с базой данных Firebase, все совпадает. Но не мог найти, почему это происходит.

1 Ответ

0 голосов
/ 05 января 2019

Добавьте это над своим if condition и проверьте, действительно ли ваши утверждения верны. Я думаю, возможно, что ваши типы данных отличаются , например, для user.code и code. Таким образом, вы также должны проверить это с == или анализом ваших значений.

// values and datatypes are equal
if (user.code === code) { 
  console.log('user.code === code');         
}

// values and datatypes are equal
if (user.codeValid === true) {
  console.log('user.codeValid === codeValid');
}

// values are equal
if (user.code == code) {
  console.log('user.code == code');         
}

// values are equal
if (user.codeValid == true) {
  console.log('user.codeValid == codeValid');
}

Для получения дополнительной информации о разнице == и === посмотрите на этот ответ:

Разница между == и === в JavaScript

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