2014-04-21 27 views
0

我沒有看到什麼錯誤在這裏:它返回的NodeJS passportJS MySQL的本地用戶身份驗證

未定義
「未知用戶」

passport.use(new LocalStrategy(
    function(username, password, done) { 
    process.nextTick(function() { 

    findByUsername(username, function(err, user) { 
    if (err) { 
     console.log(err); 
     return done(err); 
    } 
    if (!user) { 
     console.log("Unknown user"); 
     return done(null, false, { message: 'Unknown user ' + username }); 
    } 
    if (user.password != password) { 
     console.log("Invalid password"); 
     return done(null, false, { message: 'Invalid password' }); 
    } 
    return done(null, user); 
    }) 
}); 
})); 


function findByUsername(username, fn) { 
    var user = []; 
    connection.query('SELECT * FROM Users WHERE username = ?', [username], function(err, rows) { 
    //console.dir(rows); 
    if(err != null) { 
     //res.end("Query error:" + err); 
     console.log("Query error:" + err); 
    } else { 
     for (var i = 0; i < rows.length; i++) { 
     var myRows = rows[i]; 
     user.push(myRows); 
     }; 
    } 
    }); 
    console.log(user); 
    console.log(user.username); 
    if (user.username) { 
    return fn(null, user.username); 
    } else { 
    return fn(null, null); 
    } 
} 

回答

0

你傳入user.username回調。相反,你應該傳遞用戶對象。 編輯:只有在執行查詢後才應調用回調。

function findByUsername(username, fn) { 
    var user = []; 
    connection.query('SELECT * FROM Users WHERE username = ?', [username], function (err, rows) { 
     //console.dir(rows); 
     if (err != null) { 
      //res.end("Query error:" + err); 
      console.log("Query error:" + err); 
     } else { 
      for (var i = 0; i < rows.length; i++) { 
       var myRows = rows[i]; 
       user.push(myRows); 
      }; 
     } 

     console.log(user); 
     console.log(user.username); 
     if (user.username) { 
      return fn(null, user); 
     } else { 
      return fn(null, null); 
     } 
    }); 
}