我正在使用以下库:
passport-oauth2-password-grant
我要做的是以下内容:
我正在使用以下实现:
PasswordGrantStrategy.prototype.userProfile = function(accessToken, done) {
return done(null, { real_name: 'Foo Baz', email: 'test@test.com' });
}
passport.use(new PasswordGrantStrategy({
tokenURL: 'http://api.local/oauth/token',
clientID: "2",
clientSecret: "",
grantType: "password",
},
function(accessToken, refreshToken, profile, done) {
return done(null, profile);
}));
function authenticate() {
return function(req, res, next) {
var username = "email@email.com";
var password = "password";
passport.authenticate('password-grant', {
username: username,
password: password
})(req, res, next);
};
}
使用用户名/密码登录API
它正在将配置文件传递给passport.use(new PasswordGrantStrategy
的回调函数,但是,我收到以下错误:
无法将用户序列化为会话
它应该是序列化的,因为我传入一个配置文件,一切看起来都很好。现在这是否意味着会话可能存在问题?
答案 0 :(得分:2)
您需要向Passport提供serializeUser和deserializeUser方法才能使其正常工作。
来自官方文档:
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
答案 1 :(得分:0)
要小心地序列化和反序列化功能,必须包含相同的用户对象。这两个功能的用户对象必须相同
passport.serializeUser((user, done)=>{
done(null, user);
});
passport.deserializeUser((user, done)=>{
done(null, user);
});