保存

时间:2017-01-26 05:07:23

标签: node.js passport.js knex.js bookshelf.js

我正在使用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);
    });
  });

我错过了一些明显的东西吗?任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

Bookshelf的模型属性不会作为简单的对象属性公开,它们需要达到get()方法(等待我们在那里拥有适当访问者的日子......)

好吧,请尝试将serializeUser()更改为:

passport.serializeUser(function(user, done) {
  done(null, user.get('localEmail'));
});