#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;