【问题标题】:PassportJs not redirecting after authenticationPassportJs 在身份验证后不重定向
【发布时间】:2021-09-11 02:00:09
【问题描述】:

我在使用 Passport 进行身份验证时遇到了一些问题。 我将我的注册策略定义如下:

    passport.use('local_signup', new localStrategy({
  usernameField: 'username',
  passwordField:'password',
  passReqToCallback: true
},function(req,username, password,done){
User.findOne({username: username},function(err,user){
  if(err){
    console.log(err);
  } else{
    if(user){
      console.log("user exists.") 
    }
    else{
      const newUser = new User();
      newUser.email = req.body.email;
      newUser.password =req.body.password;
      newUser.username = req.body.user_name;
      newUser.first_name = req.body.first_name;
      newUser.last_name = req.body.last_name;
      newUser.save(function(err){
        if(err){
          console.log(err);
        }else{
          console.log('success');
        }
      })
    }
  }

})
})
)

然后我在我的注册路径中调用了这个策略

app.post('/register', passport.authenticate('local_signup', {
        successRedirect : '/drinks',
        failureRedirect : '/register',
        failureFlash : true
    }));

如果身份验证成功,它应该触发饮料路线

  app.get('/drinks',function(req,res){
    if(req.isAuthenticated()){
      res.render('start');
    } else {
      res.redirect('/login')
  }

}) 

successRedirect 未重定向到所需页面。它仍然停留在注册路线上。然而,填充的用户出现在我的数据库中,所以至少我的策略是有效的。我不知道如何调试这个。任何帮助,将不胜感激。谢谢

【问题讨论】:

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


    【解决方案1】:

    您没有使用done()。据我了解,它是策略代码的退出点,并根据您传入的参数让流程成功或失败。它是策略实现代码中回调中的一个参数。是something internal to passport

    成功时这样调用:

    return done(null, newUser);
    

    出现错误时这样调用:

    done(err);
    

    【讨论】:

    • 不错。如果对您有帮助,请将此答案标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2018-03-26
    • 2014-11-20
    • 1970-01-01
    • 2011-02-18
    • 2016-05-13
    • 2017-12-24
    相关资源
    最近更新 更多