PassportJS не сохраняет сеансы

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

#javascript #node.js #экспресс #мангуст #passport.js

Вопрос:

Я использую react и nodejs с passportjs. Я вызвал post-запрос для проверки имени пользователя и пароля с использованием локальной стратегии. и на той же странице у меня есть кнопка, которая вызывает запрос get только для console.log (req.user).

Проблема в том, что на route / login — post я могу console.log(req.user), а когда я нажимаю на кнопку, чтобы отправить запрос get в / getstatus, он выдает мне undefined .

Если вы проверяете маршрут /login post, res.send(req.user) также отправляет undefined , тогда как console.log(req.user) показывает правильную информацию в консоли.

Мне нужна помощь, не знаю, что я делаю не так.

Ниже у меня есть мой код:

 const express = require("express");
const bodyParser = require("body-parser");
require("dotenv").config();
const mongoose = require("mongoose");

const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");
const cookieParser = require("cookie-parser");
const expressSession = require("express-session");
const cors = require("cors");
const session = require("cookie-session");
const LocalStrategy = require("passport-local").Strategy;

//............................Initialization of middleware..........................

const app = express();
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(cors());

app.use(cookieParser());

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

//..............connect to a database...............................

const Users = new mongoose.Schema({
  username: String,
  password: String,
});
Users.plugin(passportLocalMongoose);
const MyModel = mongoose.model("MyModel", Users);

passport.use(MyModel.createStrategy());
// passport.use(new LocalStrategy(MyModel.authenticate()));

passport.serializeUser(MyModel.serializeUser());
passport.deserializeUser(MyModel.deserializeUser());

 

mongoose.connect(
  process.env.DB_HOST,
  {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  },
  () => {
    console.log("Database Connected");
  }
);
// };

//......................Routes........................

app.post(
  "/login",
  cors(),
  passport.authenticate("local", {
    failureRedirect: "/failure",
  }),
  function (req, res, next) {
    res.send(req.user);
    console.log(req.user);
  }
);

 

app.get("/failure", (req, res) => {
  res.send({
    name: "fff",
    age: 23,
    status: 500,
    msg: "Invalid Username or Password",
    color: "danger",
  });
});
 

app.post("/reg", cors(), (req, res) => {
  let username = req.body.username;
  let password = req.body.password;
  //   connectdb();
  MyModel.register({ username: username, active: false }, password, function (
    err,
    user
  ) {
    if (err) {
      console.log(err);
    } else {
      res.send("Success");
    }
  });
});

app.get("/getstatus", (req, res) => {
  console.log(req.user);

   
});

//...........Start Server..........................

app.listen(5000, () => {
  console.log("Server Started on Port 5000");
});

  

Ответ №1:

Я получил решение, проблема не в PassportJS. это с Axios.

Эта строка кода необходима:

 Axios.defaults.withCredentials = true;