Запрос PassportJS.аутентифицированный всегда возвращает false

#javascript #node.js #express #passport.js

Вопрос:

Я использую PassportJS с приложением node express. Я создал 3 маршрута:

  1. /вход в систему
  2. /зарегистрироваться
  3. /авт.

Теперь, когда вход пользователя в систему завершен успешно.Аутентификация() верна, но когда я перехожу на другие маршруты на интерфейсе, который является приложением react. Я получаю ответ.Аутентифицированный() ложь. Я использую аутентификацию на основе сеанса passportjs. Я реализовал маршрут /auth, потому что я хочу отправить поле isLoggedIn со стороны сервера, и если это правда, то я перемещаю пользователя по частным маршрутам в react-маршрутизаторе, если isLoggedIn является ложным, то пользователь не имеет права просматривать эту веб-страницу. Я просмотрел много ресурсов в Интернете, но ни один из них не работает.

passport-config.js

 const passport = require("passport");
const LocalStrategy = require("passport-local").Strategy;
const User = require("./models/user");
const bcrypt = require("bcrypt");

passport.use(
  new LocalStrategy(
    {
      usernameField: "email",
      passwordField: "password",
    },
    async (email, password, done) => {
      try {
        const user = await User.findOne({ email });
 
        if (!user) {
          return done(null, false, {
            message: "Username/email not registered",
          });
        }
        const temp = await bcrypt.compare(password, user.password);

        try {
          if (await bcrypt.compare(password, user.password)) {
            return done(null, user);
          } else {
            console.log("Inside else");
            return done(null, false, { message: "Password incorrect" });
          }
        } catch (e) {
          return done(e);
        }
      } catch (error) {
        done(error);
      }
    }
  )
);

passport.serializeUser(function (user, done) {
  // console.log("serializeUser id", user.id);
  done(null, user.id);
});

passport.deserializeUser(function (id, done) {
  // console.log("deserializeUser", id);
  User.findById(id, function (err, user) {
    done(err, user);
  });
});
 

user.js:

 router.post("/login", passport.authenticate("local"), async (req, res) => {
  console.log("Login route");
  const { email, password } = req.body;
  const user = await User.findOne({ email });
  if (!user) {
    return res.status(409).json({
      message: "User doesn't exist",
    });
  }
  bcrypt.compare(password, user.password, (err, result) => {
    if (err) {
      return res.status(401).json({
        message: "Auth failed",
      });
    }
    if (result) {
      console.log("result login", result);
      return res.status(200).json({
        userId: user._id,
        message: "Login successful",
      });
    }
    return res.status(401).json({
      message: "Auth failed",
    });
  });
});

router.post("/register", async (req, res) => {
  try {
    const { email, password, type, firstName, lastName } = req.body;
    const doesExist = await User.findOne({ email });
    if (doesExist) {
      return res.status(409).json({
        message: "Email exists",
      });
    }

    bcrypt.hash(password, 10, (err, hash) => {
      if (err) {
        return res.status(500).json({
          error: err,
        });
      } else {
        const newUser = new User({
          email: email,
          password: hash,
          type: type,
          firstName: firstName,
          lastName: lastName,
        });
        newUser
          .save()
          .then((user) => {
            console.log(user);
            res.status(201).json({
              message: "User created",
            });
          })
          .catch((err) => {
            console.log(err);
            res.status(500).json({
              error: err,
            });
          });
      }
    });
  } catch (error) {
    console.log("error", error);
  }
});

router.get("/auth", async (req, res) => {
  if (req.isAuthenticated()) {
    res.status(200).json({ isLoggedIn: true });
  } else {
    res
      .status(401)
      .json({ msg: "You are not authorized to view this resource" });
  }
});
 

server.js файл: https://pastebin.com/JmxQCeGS