【问题标题】:Passing extra arguments to function checkNotAuthenticated将额外的参数传递给函数 checkNotAuthenticated
【发布时间】:2020-08-08 14:57:24
【问题描述】:

我正在尝试编写一个函数来检查用户是否已通过身份验证,如果是,则将它们重定向到通过同一函数传递的特定页面。这就是我认为我可以做到的方式:

function checkNotAuthenticated(req, res, next, redirect) {
    if (!req.isAuthenticated()) {
        return next()
    }
    res.redirect(redirect)
}

app.post("/login", checkNotAuthenticated("/account"), passport.authenticate('local', {
    successRedirect: "/account",
    failureRedirect: "/login",
    failureFlash: true
}))

但是,此方法不传递 reqresnext 参数。仅当我调用不带括号 (checkNotAuthenticated) 的函数时才通过这些函数,为我填写。如何通过相同的函数运行我自己的重定向参数?或者,有没有更好的方法来实现这一点?

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    您可以更改参数的顺序并使用Function#bind

    function checkNotAuthenticated(redirect, req, res, next) {
        if (!req.isAuthenticated()) {
            return next()
        }
        res.redirect(redirect)
    }
    
    app.post("/login", checkNotAuthenticated.bind(null, "/account"), passport.authenticate('local', {
        successRedirect: "/account",
        failureRedirect: "/login",
        failureFlash: true
    }))
    

    【讨论】:

      猜你喜欢
      • 2021-02-27
      • 2016-06-08
      • 2017-04-09
      • 2018-10-07
      相关资源
      最近更新 更多