Passportjs .authenticate 未运行/完成运行

问题描述 投票:0回答:1

我正在尝试使用passportjs来验证用户登录。当passport.authenticate在登录发布请求上运行时,网页将永远不会继续成功或失败路线。这是相关的控制器。

const User = require("../models/user");
const Message = require("../models/message");
const session = require("express-session");
const passport = require("passport");
const bcrypt = require("bcryptjs");
const LocalStrategy = require("passport-local").Strategy;

const { body, validationResult } = require("express-validator");

const asyncHandler = require("express-async-handler");

passport.use(
  new LocalStrategy(async (username, password, done) => {
    try {
      const user = await User.findOne({ username: username });
      if (!user) {
        console.log("successfully found user");
        return done(null, false, { message: "Incorrect username" });
      }
      if (user.password !== password) {
        console.log("matching password");
        return done(null, false, { message: "Incorrect password" });
      }
      return done(null, user);
    } catch (err) {
      return done(err);
    }
  })
);

passport.serializeUser((user, done) => {
  done(null, user.id);
});

passport.deserializeUser(async (id, done) => {
  try {
    const user = await User.findById(id);
    done(null, user);
  } catch (err) {
    done(err);
  }
});

exports.get_user_signup = asyncHandler(async (req, res, next) => {
  res.render("signup");
});
exports.post_user_signup = asyncHandler(async (req, res, next) => {
  if (req.body.password !== req.body.confirmpassword) {
    res.redirect("/sign-up");
  }
  const user = new User({
    username: req.body.username,
    password: req.body.password,
    status: true,
  });
  await user.save();
  res.redirect("/");
});
exports.get_user_login = (req, res, next) => {
  res.render("login");
};

exports.post_user_login = [
  (req, res, next) => {
    passport.authenticate("local", {
      successRedirect: "/",
      failureRedirect: "/",
    });
  },
];

如果我在身份验证尝试之后进行重定向,它会立即重定向到该页面,并且用户未登录。在本地策略中放入 console.log 永远不会显示,所以我认为该功能从未运行过。

javascript mongodb passport.js
1个回答
-1
投票

您可以使用 Node.js 护照身份验证快速下载简单干净的示例的克隆 https://github.com/rohit13807/nodejs-authentication-with-passportjs

如果需要更多细节或描述,请评论。

© www.soinside.com 2019 - 2024. All rights reserved.