问题描述
我想用 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")