passportJS:使用名称不是id的用户标识字段

我发现这个伟大的节点mysql样板:

https://github.com/ocastillo/nodejs-mysql-boilerplate

它运作了不起! 但是,现在我需要将其挂接到我现有的用户表中,而我的键字段被命名为userID,而不是简单的id,并且在mysql中更改键字段名称打破了示例。 所以我的问题是,在项目中,我需要指定一个不同的ID字段名称? 我在/util/auth.js中看到了user.id passport.serializeUser和id在passport.deserializeUser函数中,但似乎它也必须在别处指定。 我希望这是passportjs用户的简单问题!

是的,你只需要改变serializeUserdeserializeUser函数中的代码即可。 您控制的这两个函数,并在其中声明您想要序列化到会话cookie(当用户login时),并从会话cookie反序列化(当用户在login后重新访问站点时)。 把它们想象成记住这个人是谁的方法,一旦他们回来了。 passport.use函数仅用于定义身份validation策略,并在其中定义“login用户”的方式。

所以这应该工作(假设我已经按照你上面所说的):

 passport.serializeUser(function(user, done) { done(null, user.userID); }); passport.deserializeUser(function(user_id, done) { new data.ApiUser({userID: user_id}).fetch().then(function(user) { return done(null, user); }, function(error) { return done(error); }); }); 

你可能会从更多的例子中受益,这里有一个关于Node内护照configuration的要点(不过这个使用的是Mongo): https : //gist.github.com/dylants/8030433