Проблемы с Passport.js файлы cookie

#node.js #express #passport.js

Вопрос:

Этот код описывает API REST, который обеспечивает аутентификацию сеанса и файлов cookie. Проблема в том, что файл cookie не устанавливается на стороне клиента, поэтому при посещении клиента /dashboardData сервер отвечает 401.

На вкладке сеть инструментов разработчика присутствует перенаправление 302 вместе с файлом cookie ответа. Однако при просмотре вкладки «Хранилище/файлы cookie» инструментов разработчика файлы cookie отсутствуют.

Следующий код описывает сервер.

 const express = require("express");
const passport = require("passport");
const session = require("express-session");
const cors = require("cors");
const LocalStrategy = require("passport-local").Strategy;
const MongoStore = require("connect-mongo");

const mongoose = require("mongoose");

const connection = mongoose.createConnection(
  "mongodb://localhost:27017/login",
  {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  },
  (err) => {
    if (err) console.log(err);
  }
);

const UserSchema = new mongoose.Schema({
  username: String,
  password: String,
});

const User = connection.model("User", UserSchema);

const app = express();

app.use(cors({ credentials: true, origin: "http://localhost:3000" }));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

passport.use(
  new LocalStrategy((username, password, done) => {
    User.findOne({ username: username })
      .then((user) => {
        if (!user) {
          console.log("no user found");
          return done(null, false);
        }

        const isValidPassword = user.password === password;
        if (isValidPassword) {
          return done(null, user);
        } else {
          return done(null, false);
        }
      })
      .catch((err) => {
        return done(err);
      });
  })
);

passport.serializeUser((user, done) => {
  console.log(user._id);
  done(null, user._id);
});

passport.deserializeUser((id, done) => {
  User.findById(id).then((error, user) => {
    if (error) {
      return done(error);
    }

    return done(null, user);
  });
});

// const sessionStore = new MongoStore({
//   mongooseConnection: connection,
//   collection: "sessions",
// });

const sessionStore = MongoStore.create({
  mongoUrl: "mongodb://localhost:27017/login",
});

app.use(
  session({
    secret: "some secret", // long random string in prod
    resave: false,
    saveUninitialized: false,
    store: sessionStore,
    cookie: {
      maxAge: 1000 * 60, // 60 minutes
      secure: false,
    },
  })
);

app.use(passport.initialize());
app.use(passport.session());

app.post(
  "/login",
  passport.authenticate("local", {
    successRedirect: "/login-success",
    failureRedirect: "/login-failure",
  }),
  (err, req, res, next) => {
    if (err) {
      next(err);
    }
  }
);

app.get("/login-success", (req, res) => {
  res.json({ message: "all good" });

  console.log("logged in with session: n", req.session, "n");
});

app.get("/login-failure", (req, res) => {
  console.log("failed to log in");
  res.json({ message: "nope" });
});
app.get("/dashboardData", (req, res) => {
  console.log(req.session, req.isAuthenticated());
  if (req.isAuthenticated()) {
    res.sendStatus(200);
  } else {
    res.sendStatus(401);
  }
});
const port = 5000;
app.listen(port);