【发布时间】:2020-01-14 21:34:00
【问题描述】:
我目前正在使用 Node + Express + Passport 创建一个小型用户身份验证应用程序。当用户登录时,他们会自动重新路由到索引页面“/”,并且会话应该通过护照身份验证建立。出于某种原因,当尝试console.log(req.user) 时,它返回“未定义”。
护照身份验证似乎与邮寄路线正常工作
app.post("/login", passport.authenticate("local", {
successRedirect: "/home",
failureRedirect: "/login"
}), (req, res) => {
})
但是没有与用户模型建立会话。我想最终将 userId 存储在会话中。这是我当前在服务器文件上使用用户模型和护照实现的设置。
const mongoose = require("mongoose");
const passportLocalMongoose = require('passport-local-mongoose');
const userSchema = mongoose.Schema({
username: String,
email: String,
password: String
});
userSchema.plugin(passportLocalMongoose);
const user = mongoose.model("User", userSchema);
module.exports = user;
-----------------------------------------------------------------------------------------
const express = require("express"),
mongoose = require("mongoose"),
bodyParser = require("body-parser"),
session = require("express-session"),
User = require("./models/user"),
passport = require('passport'),
LocalStragety = require('passport-local'),
app = express();
mongoose.connect("mongodb://localhost/shopping_cart_app", { useNewUrlParser: true })
.then(console.log("MongoDB Connected"))
.catch(err => console.log(err));
app.set("view engine", "ejs");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static(__dirname + '/views'));
app.use(session({
secret: "secret",
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStragety(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.post("/login", passport.authenticate("local", {
successRedirect: "/home",
failureRedirect: "/login"
}), (req, res) => {
})
我已经尝试更多地研究 Passports 配置,但在提供的文档中,它指出一旦 passport.authenticate 运行,就会建立与用户的会话。任何提示将不胜感激。
谢谢
【问题讨论】:
标签: node.js mongodb express mongoose passport.js