【问题标题】:Passport not successfully redirecting护照未成功重定向
【发布时间】:2021-01-05 23:23:28
【问题描述】:

我从 odin 项目中学习了一个关于护照的教程,它很有效,所以我决定实施我在自己的项目中学到的东西,他们和我的不同之处在于我遵循了一种设计模式,而他们没有,而我似乎无法找到它为什么没有响应的问题。 在我的登录页面中,我使用了电子邮件和密码,并且我尝试多次更改以下代码。

这是controller.js

    //passport functions
passport.use(
  new LocalStrategy((username, password, done) => {
    User.findOne({ username: username }, (err, user) => {
      console.log(user)
      
      if (err) { 
        return done(err);
      };
      if (!user) {
        return done(null, false, { msg: "Incorrect username" });
      }
      if (user.password !== password) {
        return done(null, false, { msg: "Incorrect password" });
      }
      return done(null, user);
    });
  })
);
passport.serializeUser(function(user, done) {
  done(null, user.id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});
//end ofpassport functions

    app.use(session({ secret: "cats", 
    resave: false, saveUninitialized: true }));
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(express.urlencoded({ extended: false }));
    app.use(function(req, res, next) {
      res.locals.currentUser = req.user;
      next();
    });

然后我从 routes.js 调用控制器来验证用户身份,但它一直失败并默认失败重定向

app.post('/signin', passport.authenticate("local",{
    successRedirect:"/",
    failureRedirect:'/signup'}))

【问题讨论】:

    标签: javascript node.js express passport.js passport-local


    【解决方案1】:

    默认情况下,LocalStrategy 期望在名为用户名和密码的参数中找到凭据。如果您的网站希望以不同的方式命名这些字段,则可以使用选项来更改默认值。

    req.body中的参数名称应与自定义字段匹配,当有空字段usernameFieldpasswordField时不调用LocalStrategy

    const customFields = {
        usernameField : "email",
        passwordField : "password"
    }
    
    passport.use(
      new LocalStrategy(customFields ,(username, password, done) => {
        User.findOne({ username: username }, (err, user) => {
          console.log(user)
          
          if (err) { 
            return done(err);
          };
          if (!user) {
            return done(null, false, { msg: "Incorrect username" });
          }
          if (user.password !== password) {
            return done(null, false, { msg: "Incorrect password" });
          }
          return done(null, user);
        });
      })
    );
    passport.serializeUser(function(user, done) {
      done(null, user.id);
    });
    
    passport.deserializeUser(function(id, done) {
      User.findById(id, function(err, user) {
        done(err, user);
      });
    });
    //end ofpassport functions
    
        app.use(session({ secret: "cats", 
        resave: false, saveUninitialized: true }));
        app.use(passport.initialize());
        app.use(passport.session());
        app.use(express.urlencoded({ extended: false }));
        app.use(function(req, res, next) {
          res.locals.currentUser = req.user;
          next();
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-19
      • 2016-04-16
      • 2018-03-19
      • 2014-08-27
      • 2014-06-12
      • 2019-01-26
      • 2014-06-12
      • 1970-01-01
      相关资源
      最近更新 更多