Получить успешный логин и быть перенаправленным с узла - PullRequest
0 голосов
/ 22 марта 2019

Я работал над проектом узла, и все для меня ново.

До сих пор, просматривая Интернет, мне удалось зарегистрировать пользователя, но теперь я не знаю, как сразу перейти на страницу пользователя после успешного входа в систему.

В index.js у меня есть:

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(emailRegister, passwordRegister,

    function(error, authData) {

        if (error) {
            return res.status(401).send('Unauthorized');

        } else {
            res.render('user');
        }
    });
});

и в auth.js

function loginUser(email, password){
    console.log(email, password);
    firebase.auth().signInWithEmailAndPassword(email, password)
        .then(function(firebaseUser) {
           // Success
            console.log('Ok, lovelly I\'m logged');
            return 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.

          return errorMessage
      });
}

как я могу вернуть firebaseUser основной функции и перенаправить на страницу пользователя?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Вы написали свой код в стандартах до 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 обещаниях ответных реакциях

1 голос
/ 22 марта 2019

Вы путаетесь между обратным вызовом и обещанием научиться работать с асинхронной операцией

Ваш код будет выглядеть так

function loginUser(email, password){
console.log(email, password);
// return promise
return firebase.auth().signInWithEmailAndPassword(email, password)
    .then(function(firebaseUser) {
       // Success
        console.log('Ok, lovelly I\'m logged');
        return firebaseUser
   })
}

И контроллер будет

   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(emailRegister, passwordRegister)
        .then(function () {
            res.render('user');
        })
        .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.
            return res.status(401).send('Unauthorized');
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...