【问题标题】:Keep having issues serializing and deserializing my PassportJS users一直在序列化和反序列化我的 PassportJS 用户时遇到问题
【发布时间】:2014-10-19 19:55:17
【问题描述】:

我将sequelize.js 用于我的数据存储,并使用github 策略和passport.js。我的代码是:

app.use(passport.initialize());

app.use(passport.session());

passport.use(new GitHubStrategy({
  clientID: '123',
  clientSecret: '456',
  callbackURL: "" + config.hostname + ":" + config.port + "/auth/github/callback"
}, function(accessToken, refreshToken, profile, done) {
  var authProviderQuery, newUser;
  console.log('accessToken');
  console.log(accessToken);
  authProviderQuery = {
    authId: profile.id
  };
  newUser = {
    name: profile.username,
    email: profile.emails[0].value
  };
  return DB.AuthProvider.find(authProviderQuery).complete(function(err, dbAuthProvider) {
    var prop, _results;
    if (err) {
      return done(err);
    }
    if (!dbAuthProvider) {
      return DB.User.create(newUser).complete(function(err, dbUser) {
        var newAuthProvider;
        if (err) {
          return done(err);
        }
        newAuthProvider = {
          name: 'github',
          oathToken: accessToken,
          authId: profile.id,
          rawJSON: profile._raw
        };
        return dbUser.createAuthProvider(newAuthProvider).complete(function(err) {
          if (err) {
            return done(err);
          }
          return done(null, dbUser);
        });
      });
    } else {
      console.log(dbAuthProvider);
      _results = [];
      for (prop in dbAuthProvider) {
        _results.push(console.log(prop));
      }
      return _results;
    }
  });
}));

passport.serializeUser = function(user, done) {
  return done(null, user.id);
};

passport.deserializeUser = function(obj, done) {
  return DB.User.find({
    where: {
      id: obj.id
    }
  }).complete(function(err, dbUser) {
    console.log(dbUser);
    return done(err, dbUser);
  });
};

app.get('/auth/github', passport.authenticate('github'));

app.get("/auth/github/callback", passport.authenticate('github', {
  failureRedirect: "/login"
}), function(req, res) {
  return console.log('authenticated');
});

当我转到/auth/github 时,我收到以下错误:

/Users/mysite/node_modules/mysql/lib/protocol/Parser.js:82
        throw err;
              ^
TypeError: object is not a function

我做错了什么?

【问题讨论】:

  • 你没有更详细的错误信息吗?因为就目前而言,它并没有说太多。
  • 我希望我做到了。就是这么说的。
  • 在我看来,错误与 Passport 无关,而是与 Sequelize/node-mysql 有关。您是否还有其他代码在其中定义 Sequelize 等方法...?
  • 它将done 视为deserializeUser 函数中的一个对象。不完全确定为什么
  • 哈这很有趣。想我已经明白了。只需为您的 deserializeUser 函数删除您的 return 关键字。尤其是第一个,因为您返回的是 Promise 本身而不是调用回调!

标签: express passport.js sequelize.js


【解决方案1】:

您正在替换 Passport 中的 serializeUserdeserializeUser 方法,而不是调用它们来分配(反)序列化程序 - 即。你有

passport.deserializeUser = function(obj, done) {
  ...
};

什么时候应该有

passport.deserializeUser(function(obj, done) {
  ...
});

查看文档:http://passportjs.org/guide/configure/

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多