首页 > 解决方案 > 如何将上次访问的 url 传递给 passport.authenticate - node.js express app

问题描述

在我的应用程序的登录路径中,我使用了 passport.authenticate() 方法:

router.post("/login", passport.authenticate("local", 
    {
        successRedirect: "/",
        failureRedirect: "/login"
    }), function(req, res){ });

但是只实现了固定的重定向 url。我想将上次访问的路由地址 - url 传递给这个进程,但是在这个实现中,authenticate() 方法没有接受请求和响应参数。

标签: node.jsexpresssessionauthenticationpassport.js

解决方案


您可以使用“req.url”获取当前 url,并在将用户重定向到 /login 之前保存到会话中

req.session.recentUrl = req.url
res.send()

现在修改 /login 路由到

router.post("/login", passport.authenticate("local",{
        successRedirect: req.session.recentUrl,
        failureRedirect: "/login"
}), function(req, res){ });

注意:确保在适当处理后清除 req.session.recentUrl。

编辑: req 没有 ​​在你发布路由中定义你这个中间件。

app.get('/protected', function(req, res, next) {
  passport.authenticate('local', function(err, user, profile) {
    if (err) { return next(err) }
    if (!user) { return res.redirect('/signin') }
    res.redirect('/account');
  })(req, res, next);
});

这个问题已经解决,更多信息:https ://github.com/jaredhanson/passport/issues/1


推荐阅读