passport.authenticate('local') 不会重定向到某个页面

问题描述

我想用 Passport 制作一个登录系统。一切都很顺利,直到我尝试使用用户名密码登录。在无效/错误的凭据上,它会用闪现消息警告我,但在有效凭据上,它只是在那里永久旋转,实际上什么也不做。

这是代码

const express = require("express");
const router = express.Router();
const User = require("../models/user");
const catchAsync = require("../utils/catchAsync");
const passport = require("passport");


router.get("/register",(req,res) => {
    res.render("users/register");
});

router.post("/register",catchAsync(async (req,res) => {
    try {
    const {email,username,password} = req.body;
    const user = new User({email,username});
    await User.register(user,password);
    req.flash("success","Welcome to Yelp Camp!");
    res.redirect("/campgrounds");
    } catch (e) {
        req.flash("error",e.message);
        res.redirect("/register");
    }
}));

router.get("/login",res) => {
    res.render("users/login");
});

router.post("/login",passport.authenticate("local",{failureFlash: true,failureRedirect: "/login"}),res) => {
    req.flash("success","WELCOME BACK!");
    res.redirect("/campgrounds");
})

module.exports = router;

即使尝试从文档中使用 successRedirect 但结果仍然相同。提前致谢!

解决方法

你应该用这个路径创建一个 get 路由,你没有在你的项目中定义这个路由

res.redirect("/campgrounds")

将 complate Url 作为 res.redicret 的参数

res.redirect("http://127.0.0.1:8080/api/campgrounds")