【问题标题】:Passport wont serialize Model after saving保存后护照不会序列化模型
【发布时间】:2017-01-26 05:07:22
【问题描述】:

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

我是否遗漏了一些明显的东西?任何帮助将不胜感激,谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    那么,尝试将您的 serializeUser() 更改为:

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

    【讨论】:

    • 这很奇怪,因为我仍然能够使用 user.id 并返回正确的整数。不过,其他属性似乎无法访问。
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多