当前位置: 首页 > 知识库问答 >
问题:

关于passport序列化/反序列化用户中回调函数的混淆

卫彭亮
2023-03-14
passport.serializeUser((user, done) => {

done(null, user.id);

});

谢谢!

共有1个答案

柴星津
2023-03-14

它是该函数在github上的一个片段(https://github.com/jaredhanson/passport/blob/08f57c2e3086955f06f42d9ac7ad466d1f10019c/lib/authenticator.js)。

如您所见,该函数接受fn参数。然后检查它是否是一个函数。如果是,则将其推送到this._serializers。后来它做了一些魔法,我认为现在不重要了。

正如您在jsdoc中所读到的,serializeUser的目的是注册用于序列化用户对象的函数。因此,您将传递一些函数,这些函数稍后将在一个带有2个参数的代码中调用,在该特定函数级别上的标签是userdone

他们给你留了一些空间,你可以用自己的代码来填充。你可以知道这会有什么表现。他们给了你一个实现自己逻辑的机会。

简单的例子:

function doSomeMagic(fn) {
  // I do some my staff
  const a = 5;
  const b = 10;

  // and now I let you decide what to do
  // you can implement your own logic in my function
  const result = fn(a, b);

  console.log(result);
}

doSomeMagic((a, b) => {
  return a * b;
});

doSomeMagic((a, b) => {
  return a + b;
});

//output:
// 50
// 15

他们就是这么做的。你可以拿我的函数,我给你两个参数,做你想做的任何事情。你可以乘,加,减,任何你想要的。我不必写独立的函数来做数学,我可以写一个,把值作为参数传递,让你决定你想做什么操作。这并不意味着我的代码将以异步方式运行。

 类似资料:
  • 我在我的应用程序中使用、模块进行身份验证策略。我试图理解是否还需要使用和方法。据我所知,这些方法使用会话来存储用户信息。我怀疑使用已经实现了使用这些方法的目的。还是我在这里完全错了? 如果我的假设错了,请指正。

  • 我想反序列化表单中的类: 其中文本是加密的,反序列化应该在重建TestFieldEncryptedMessage实例之前取消对值的加密。 我采用的方法非常类似于:https://github.com/codesqueak/jackson-json-crypto 也就是说,我正在构建一个扩展SimpleModule的模块: 如您所见,设置了两个修饰符:EncryptedSerializerModif

  • 我正在尝试使用kryo序列化和反序列化到二进制。我想我已经完成了序列化,但似乎无法反序列化。下面是我正在处理的代码,但最终我想存储一个字节[],然后再次读取它。文档只显示了如何使用文件。

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并

  • 问题内容: 我注意到存储在Redis中的某些序列化对象在反序列化方面遇到问题。 当我对Redis中存储的对象类进行更改时,通常会发生这种情况。 我想了解问题,以便为解决方案设计一个清晰的方案。 我的问题是,什么导致反序列化问题?移除公共/私人财产会引起问题吗?也许添加新属性?向类添加新功能会产生问题吗?那么更多的构造函数呢? 在我的序列化对象中,我有一个属性Map,如果我更改(更新了一些属性,添加

  • 问题内容: Golang中将结构序列化和反序列化为字符串的最佳方法(完整性和性能)是什么,反之亦然? 例如,如果我有这个结构: 我想将其存储在Redis上并取回。我试过保存,整型和字符串,这很好,但是如何存储结构对象? 问题答案: 使用gob和base64可以解决问题,例如: 当您需要序列化自定义结构或类型(例如struct)时,只需添加以下行: