PassportJS用户身份验证挂起成功

时间:2020-03-14 01:36:43

标签: javascript node.js express authentication passport.js

想知道您是否可以帮助我,因为我对自己到底在做什么错感到困惑。我尝试搜寻google和stackoverflow来解决我的问题,尽管有类似的问题,但找不到任何可以解决的问题。首先,这是我的登录路线:

router.post("/login", middleware.loggedIn, middleware.toLowerCase, middleware.loginValidate, middleware.authenticate, (req, res) => {
});

在每个中间件功能中,我都会验证并验证输入,然后最终对其进行身份验证。另外,我还调用next();。继续每个中间件功能到下一个。在这里,它们是按照发布请求的顺序进行的:

middlewareObj.loggedIn = (req, res, next) => {
    if(req.user){
        req.flash("error", "You are already logged in!");
        return res.redirect("/");
    }
    next();
}

middlewareObj.toLowerCase = (req, res, next) => {
 req.body.username = req.body.username.toLowerCase();
 next();
}


middlewareObj.loginValidate = [
 check("username").trim().escape(),
 check("password").escape(),
    (req,res,next) => {
 next();
    }
];

middlewareObj.authenticate =  (req, res, next) => {

 passport.authenticate("local", {
 successRedirect: "/",
 failureRedirect: "back",
 successFlash: "Welcome back, " + req.body.username + "!",
 failureFlash: "Invalid username or password."
    }) (req, res, next);
}
护照验证中的

failureRedirect和failureFlash可以正常工作。但是,由于某种原因,当用户输入经过身份验证时,它只会挂在同一页面上并卡在加载栏上。直到我再次单击同一页面上的登录并发送额外的帖子请求,该帖子才会被我登录的中间件捕获,并告诉我我已经登录了我的帐户。因此,似乎过帐请求正在通过并验证帐户,但由于某种原因,未触发successRedirect代码。奇怪的是,successRedirect在本地可以正常运行,但是在已部署的站点(由免费的heroku托管)上,此问题将持续存在。此外,这似乎仅在Chrome上发生,并且仅在用户首次尝试成功登录时才发生。有什么想法吗?

如果我错过了帖子中应该出现的任何内容,请告诉我,我将在必要时进行澄清和补充。

0 个答案:

没有答案