node.js - 无法使用 Passport 本地策略对用户进行身份验证
问题描述
我正在使用护照在我的应用程序上实现登录功能。但是,每次我尝试对用户进行身份验证时,我都无法通过身份验证并被重定向到失败的 URL。我已经确认 MongoDB 数据库中有一个用户并且用户提供的密码是正确的。但是,我无法通过护照认证。谁能帮帮我?
这是我的 index.js
const express = require('express');
const app = express();
const mongoose = require('mongoose');
const path = require('path');
const ejsMate = require('ejs-mate');
const loginRoutes = require("./routes/login");
const User = require('./models/users');
const session = require('express-session');
const userRoutes = require('./routes/user');
const passport = require('passport');
const localStrategy = require('passport-local');
sessionConfig = {
name: "session",
secret: 'BetterSecret',
resave: false,
saveUninitialized: true,
cookie: {
httpOnly: true,
expires: Date.now() + 604800000, //Date.NOW + No. of Miliseconds in the week
maxAge: 604800000
}
};
//Connection strings only beyond this line
mongoose.connect('mongodb://localhost:27017/myLoc').then(console.log("DB connected")).catch(error => handleError(error));
app.listen(5500, (req, res, next) => {
console.log("Connected");
});
//app.uses
app.use(express.urlencoded({ extended: true }));
app.use("/", loginRoutes);
app.use("/business", userRoutes);
app.engine('ejs', ejsMate);
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views')); //setting up the views directory
app.use(express.static(path.join(__dirname, 'public'))); //public directory to serve static content
app.use(session(sessionConfig));
app.use(passport.initialize());
app.use(passport.session());
passport.use(new localStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
这是用于登录的路由器:
const express = require('express');
const router = express.Router();
const users = require('../controllers/users');
const passport = require('passport');
router.route('/login')
.get(users.renderLoginForm)
.post(passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }), users.login);
router.route('/register')
.get(users.renderRegisterForm)
.post(users.createNewUser);
module.exports = router;
对于控制器,我现在只有一个 console.log
module.exports.login = (req, res, next) => {
console.log("I am here");
};
解决方案
推荐阅读
- python - 如何从配置文件动态提供函数参数默认值?
- ios - Ionic v3 从 PLIST 中删除特定键
- python - 名称“article_read”未定义
- go - 运行“go doc”会导致“no such tool”错误
- mongodb - 如何在分组条件下合并文档并在 mongo 集合中创建新字段?
- azure - 由 webhook 触发的 Azure 函数对历史事件的复合列表执行操作
- django - ImportError:没有名为“auth”的模块
- javascript - 如何在递归for循环函数中返回值?
- php - 如何防止ajax调用触发两次
- java - java.exe 使用过多 CPU 并崩溃