我正在使用passport / SQL构建基本用户身份验证应用程序,看起来护照在序列化模型并将其传递给下一个请求时遇到问题。
发布到我的注册表单并成功保存用户(在SQL中检查并确认行插入了数据)后,我想将模型传递给Passport以序列化并在下一页上使用。
passport.use('local-signup', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
process.nextTick(function() {
new User({
localEmail: email,
localPassword: User.generateHash(password)
}).save().then(function(model) {
return done(null, model);
});
});
}));
它在这里应该序列化它,但我遇到了错误Error: failed to serialize user into session
。现在这没有多大意义,因为从理论上讲,我应该使用return done(null, model);
传递保存承诺中新保存的用户
passport.serializeUser(function(user, done) {
done(null, user.localEmail);
});
passport.deserializeUser(function(email, done) {
new User({localEmail: email}).fetch().then(function(user) {
done(null, user);
});
});
我错过了一些明显的东西吗?任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
Bookshelf的模型属性不会作为简单的对象属性公开,它们需要达到get()
方法(等待我们在那里拥有适当访问者的日子......)
好吧,请尝试将serializeUser()
更改为:
passport.serializeUser(function(user, done) {
done(null, user.get('localEmail'));
});