Passport.js 里面使用一种叫策略(Strategy)的东西验证用户的身份,在应用里我们可以选择使用不同的策略验证用户的身份。比如用户名与密码,JWT,oAuth,OpenID 等等。使用策略的时候需要配置一下。
下面是 LocalStrategy(用户名/密码) 的用法:
const passport = require('passport'); const LocalStrategy = require('passport-local').Strategy; passport.use(new LocalStrategy( (username, password, done) => { User.findOne({ username: username }, (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); }); } ));
在上面的例子里用了一种叫 LocalStrategy 的策略,它的作用就是验证根据用户名与密码验证用户。使用策略通过 passport 的 use 方法。
验证回调(Verify Callback)
使用 LocalStrategy 的时候给它提供了一个回调,这个回调叫 Verify Callback,验证回调。主要的作用就是去验证用户。Passport 验证一个请求,它会把请求里包含的凭证解析出来作为回调的参数,这里就是用户名与密码。
在验证回调里,可以去做一些验证。如果成功就执行 done ,并且带着验证成功的用户。
return done(null, user);
如果凭证无效,比如密码不对,那么 done 应该带着 false。
return done(null, false);
如果验证的时候出了一些问题,比如应用的数据库连不上了,应该把错误交给 done 。
return done(err);