【问题标题】:Custom callback passportjs?自定义回调passportjs?
【发布时间】:2015-02-01 00:31:33
【问题描述】:

我有一个订购单,用户需要先注册才能订购,所以我可以创建一个帐户然后像这样处理订单。

router.post('/project/new', passport.authenticate('local-signup'), function(req, res) {

  gateway.customer.find(req.user.id, function(err, customer) {

    if(customer) {

      // method for a customer inside the vault

    } else {

      // add a non existing customer to vault

    }

  });

});

问题是如果有人已经登录并想要下订单。我需要检查他们是否已登录,如果是,那么我可以继续下订单,如果不是,那么我需要进行身份验证然后登录。

所以这样的事情对我来说很有意义。

//prefer this!!
router.post('/project/new', function(req, res) {

  if(req.user) {

    // do stuff for existing logged in user

  } else {

    // user is NOT logged in need passport
    passport.authenticate('local-signup', function(err, user, info) {

      // do stuff for new user

    })(req, res, next);

  }

});

问题是我得到了next is not defined,我在passportjs 文档中看到Jared 在get 路由中使用了这个自定义回调。

有人可以帮我做一个自定义回调吗?谁有更好的策略?

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    它是未定义的,因为你没有定义它,你可以这样定义它:

    router.post('/project/new', function(req, res, next){
     // rest of your code here
    }
    

    尽管在您的情况下,您最好将身份验证逻辑移至单独的中间件,如下所示:

    router.post('/project/new', 
      function(req, res, next) {
        if (req.user) {
          next();
        } else {
    
          // do whatever to create a new user
    
        }
      },
      function(req, res) {
        // this function will be called after your auth logic is done
        // at this point, your req.user should be populated, respond with an error status if for some reason its not
        if (!req.user) return res.send(500);
    
        // the rest of your logic here
    
      }
    );
    

    【讨论】:

    • 看起来不错,一直不明白next的目的,谢谢帮忙。让我试试这个!
    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2017-11-06
    • 2014-09-30
    • 2018-01-28
    • 1970-01-01
    • 2017-07-10
    相关资源
    最近更新 更多