首页 > 解决方案 > 无法使用 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");
};

标签: node.jsexpressmongoosepassport.jspassport-local

解决方案


推荐阅读