0

大家

我正在开发一个使用 IBM db2 作为数据库并使用护照 js 进行身份验证的应用程序。

所以我的问题是如何将来自登录表单的值与存储在数据库中的值进行比较。

passport.use(new LocalStrategy({
      usernameField: 'euser',
      passwordField: 'epass'
},
function(username, password, done){
      process.nextTick(function() {
         /* how do i open connection to db2 and compare username and password 
         with the data stored in database? */
      });  
}
));

我如何打开与 db2 的连接并比较值以验证用户并启动会话。

4

1 回答 1

0

取自 passport.js 文档;例如,将 usernameField 更改为用户名,将 passwordField 更改为密码。如果您愿意,您可以使用数据库结果的登录结果变量分配来切换用户对象。

var username = ibm d2 query results for username;
var password = ibm d2 query results for password;


     var User = {//login form username/password
username: '', //whatever they entered will go here,
password: '' 
};

.... // 以上作为参数传递给函数(用户名,密码,完成){

用户是从您的登录表单返回的对象。findOne 是一个 passportJs 函数,它将您的用户名属性的值与您分配给变量用户名的数据库查询结果进行比较。如果匹配成功而不是错误,则将结果作为用户对象传递给下一个函数。

function(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));

如果不存在错误并且找到匹配项,则函数返回用户对象结果。请注意,这是错误优先样式,因此他为成功的结果返回空值,而不仅仅是结果。在这种情况下为 null 意味着没有错误。

于 2015-09-27T21:24:24.093 回答