【问题标题】:Passport authentication - LocalStrategy never being called护照身份验证 - LocalStrategy 永远不会被调用
【发布时间】:2019-03-10 14:32:17
【问题描述】:

我正在尝试使用 LocalStrategy 通过 Passor 进行身份验证。 问题是这个策略似乎永远不会被调用,如果我在我的 passport.authenticate 中记录用户对象,它会返回“false”。

这是我的客户端代码:

  logIn = () => {
    const username = this.state.mail;
    const password = this.state.password;
    console.log("stringify " + JSON.stringify({username, password}));
    fetch('http://localhost:3001/api/logIn',
    {
      method: 'POST',
      headers:  {'Content-Type': 'application/json'
    /*'Access-Control-Allow-Origin': '*'*/},
      body: JSON.stringify({username, password})
    }).then(res => res.json()).then((res) => {
      if (!res.success) console.log("fallito");
      else console.log(res.username);
    });
  }

这里是策略:

passport.use(new LocalStrategy(
  { usernameField: "mail" },
  (username, password, done) => {
    console.log("Inside localStrategy");
  User.findOne({ mail: username.toLowerCase() }, (err, user) => {
     if (err) {
       console.log("not found " + err);
       return done(err); }
     if (!user) {
       console.log("not users")
       return done(undefined, false, { message: `Email ${mail} not found.` });
     }
     user.comparePassword(password, (err, isMatch) => {
       if (err) {
         console.log("password not correct " + err);
         return done(err); }
       if (isMatch) {
         console.log("match");
         return done(undefined, user);
       }
       console.log("invalid password")
       return done(undefined, false, { message: "Invalid email or password." });
      });
    });
}));

这里调用passport.authenticate:

router.post('/logIn', (req, res, next) =>{
  console.log('Inside Login post ' + req);

  const user = new User();
  const {username, password} = req.body;
  user.mail = username;
  user.password = password;

  passport.authenticate('local', (err, user, info) => {
    console.log('Inside Login authenticate ' + user.mail);
    if (err) { return next(err); }
   if (!user) { return res.redirect('/'); }

   // req / res held in closure
   req.logIn(user, function(err) {
     console.log('Inside Login login ' + user);
     if (err) { return next(err); }
     return res.json({
       success: true,
       username: req.user.name
     });
   });

 })(user, res, next);
 /*
  console.log("in authentication: " + req);
  return res.json({
    success: true,
    username: req.user.name
  });
  }
)(req,res,next);*/
});

请注意,我一直在尝试传递一个用户对象,就像上面的代码一样,并直接传递 req var。

【问题讨论】:

    标签: javascript reactjs express authentication passport.js


    【解决方案1】:

    在登录路由中,您正在使用 passport.authenticate 调用 local 策略,但您尚未创建 local 策略。

    请尝试

    passport.use('local', new LocalStrategy(

    而不是

    passport.use(new LocalStrategy(

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-02
      • 2018-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      相关资源
      最近更新 更多