Вы написали свой код в стандартах до ES6, используя концепцию обратных вызовов
const userService = require("./auth");
app.post("/login", function(req, res) {
var userEmail = req.body.emailLogin;
var userPassword = req.body.passwordLogin;
console.log(userEmail, userPassword); //This log the email and the password
userService.loginUser(
userEmail,
userPassword,
function(error, authData) {
if (error) {
return res.status(401).send("Unauthorized");
} else {
res.render("user");
}
}
);
});
Но вы забыли включить аргумент обратного вызова в метод входа пользователя в систему, и как только метод входа пользователя в систему завершился успешно, вызовите callback(null, result)
иесли это ошибка, вызовите callback(error)
.
function loginUser(email, password, callback) {
console.log(email, password);
firebase
.auth()
.signInWithEmailAndPassword(email, password)
.then(function(firebaseUser) {
// Success
console.log("Ok, lovelly I'm logged");
callback(null, firebaseUser);
})
.catch(function(error) {
// Error Handling
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorCode); //auth/user-not-found
console.log(errorMessage); //There is no user record corresponding to this identifier. The user may have been deleted.
callback(error);
});
}
Я переписал код, используя последние стандарты, используя async / await, который намного чище и короче.
app.post("/login", async (req, res) => {
const userEmail = req.body.emailLogin,
userPassword = req.body.passwordLogin;
const user = await loginUser(userEmail, userPassword).catch(error => {
return res.status(401).send("Unauthorized");
});
res.render("index.js", user);
});
const loginUser = async (email, password) => {
try {
const user = await firebase
.auth()
.signInWithEmailAndPassword(email, password);
return user;
} catch (error) {
throw error;
}
};
ЕстьКонцепция обещаний, в которую я не буду вдаваться, потому что async / await является синтаксическим сахаром этого.Обо всем этом можно прочитать в async / await обещаниях ответных реакциях