我将Passport与node-orm2结合使用进行身份验证。Passport 要求您注册用于序列化和反序列化会话的用户的函数。我的用户存储在我通过 node-orm2 的 Express 中间件访问的数据库中。orm2 中间件将其模型标记到 req 对象上以便于访问。不幸的是,Passport 不提供对deserializeUser
. 我遇到了这个解决方案,但我希望有更好的东西:
var User;
passport.use({ passReqToCallback: true }, new LocalStrategy(function (request, username, password, done) {
if (!User) {
User = request.models.User;
}
User
.find({ username: username })
.limit(1)
.run(function (err, users) {
var user = users[0];
if (err) {
done(err);
} else if (!hasher.verify(password, user.password)) {
done(null, false);
} else {
done(null, user);
}
});
}));
passport.deserializeUser(function (id, done) {
User.get(id, done);
});