【发布时间】:2021-04-04 20:30:16
【问题描述】:
所以我有一个登录表单,它向 app.js 发出 POST 请求:
//app.js file
const express = require("express");
const ejs = require("ejs");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const { check } = require('express-validator');
const passport = require("passport");
const session = require("express-session");
const UserLogin = require("./middlwares/user-login");
const User = require("./database/Users");
const app = express();
//setting ejs
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static("public"));
//setting sessions and passport
app.use(session({
secret: "Our little Secret for Sessions.",
resave: false,
saveUninitialized: false
}));
app.use(passport.initialize());
app.use(passport.session());
//Serializing and deserializing user for checking login status in cookie
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.post("/login", UserLogin);
然后身份验证发生在 user-login.js 中,它具有 Passport.authenticate()。这适用于另一个教程示例,我在主 app.js 本身中进行身份验证。但是在这里,验证功能没有执行。我完全不明白为什么。我不知道如何调查执行 passport.authenticate() 时会发生什么。我尝试浏览文档,但无法弄清楚它失败的原因。只是想在自己的项目中实现我学到的东西。
//user-login.js
const mongoose = require("mongoose");
const passport = require("passport");
const User = require("../database/Users");
module.exports = async (req, res) => {
const user = new User({
username: req.body.loginEmail,
password: req.body.loginPassword
});
console.log(user.username + " and " + user.password);
req.login(user, function(err){
if (err) {
console.log("user log-in triggered but error: " + err);
} else {
console.log("before authenticate");
passport.authenticate("local")(req, res, function(){
console.log("after authenticate");
res.render("user-logged-in", {});
});
}
});
有什么帮助吗?刚开始使用stackOverflow,如果代码转储是一个不好的提问方式,我们深表歉意。我也不明白这种语法 - passport.authenticate('local')(req, res, function(){});
【问题讨论】:
标签: node.js mongoose passport.js passport-local