初学者护照/反应/节点-isAuthenticated()始终返回False

时间:2018-11-13 17:48:09

标签: javascript node.js reactjs passport.js

我正在努力将Passport.js,Node&React组合在一起。

基本上,我正在尝试构建一个登录/注册系统。似乎很基本,但是我无法正常工作。

问题---> ,函数isAuthenticated()始终返回False。烦人,因为我想在React的componentDidMount()中调用该函数来检查用户是否已经登录。

我的猜测是,我应该对端点/checkIfLoggedIn使用'POST'请求并传递一些数据,但是什么数据呢?

我已经包含了登录系统的代码(有效),所以你们可以看到我如何管理用户登录。也许问题出在登录时,我忘记了在用户登录后要做什么?

这是我的代码:

  

Routes.js

app.post("/login", function(request, response) {
  passport.authenticate("local-login", function(err, user, info) {
    if (err) {
      return console.log(err);
    }
    if (!user) {
      return response.send(false);
    }
    request.logIn(user, function(err) {
      if (err) {
        return console.log(err);
      }
      request.session.cookie.maxAge = 1000 * 60 * 3;
      request.session.cookie.expires = false;
      return response.send(true);
    });
  })(request, response);
  });

app.get('/checkIfLoggedIn', (req, res) => {
  console.log(req.isAuthenticated())
});
  

反应(此处可能无关紧要,因为问题来自后端。此处提供一些上下文)

checkAuth () {
  fetch('http://localhost:8080/checkIfLoggedIn')
    .then(response => response.json())
    .then(data => console.log(data));
}

login(username, password) {
  fetch('http://localhost:8080/login', {
    method: 'POST',
    body: JSON.stringify({username: username, password: password}),
    headers : { 
      'Content-Type': 'application/json',
      'Accept': 'application/json, text/plain, */*',
    }
  }).then(res=>res.json())
    .then(res => {

      if (res === true) { // connection successfull
        this.setState({
          user_connected: true,
          username: this.state.username,
          modalVisible: false
        })
      } else {
        message.info('Incorrect credentials');
      }
    }
  );
}
  

Passport.js

passport.use(
'local-login',
new LocalStrategy({
 usernameField : 'username',
 passwordField: 'password',
 passReqToCallback: true,
     failureFlash: true,
 badRequestMessage : 'Missing username or password.',
},
function(req, username, password, done){
   connection.query("SELECT * FROM tbl_users WHERE username = ? ", [username],
   function(err, rows){
    if(err)
     return done(err);
    if(!rows.length){
      return done(null, false, { logged: "NO" });
    }
    if(!bcrypt.compareSync(password, rows[0].password)) {
      return done(null, false, { logged: "NO" });
    }
    return done(null, rows[0]);
   });
  })
)}

我可能不知道有什么可以使用户通过身份验证的,我真的不知道。

干杯!

0 个答案:

没有答案