我是否实现序列化和反序列化NodesJS+Passport+RedisStore?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (184)

是否实现序列化和反序列化?

RedisStore被设置为我的使用Express的会话存储。这是否意味着我没有实现序列化和反序列化?会自动发生吗?

当我不实现这些方法时,我会得到以下Express错误-500错误:未能将用户序列化为会话。当我实现它们时,我不知道在反序列化中放什么。

有没有NodeJS+Passport+RedisStore的好例子?

var sessionStore = new RedisStore({
                                        host: rtg.hostname,
                                        port: rtg.port,
                                        db: redisAuth[0],
                                        pass: redisAuth[1]
                                      });

passport.use(new ForceDotComStrategy({
    clientID: clientId,
    clientSecret: clientSecret,
    callbackURL: myurl
},
function(token, tokenSecret, profile, done) {
    console.log(profile);
    return done(null, profile);
  }
));

appSecure.configure('production', function(){
appSecure.use(allowCrossDomain);
appSecure.use(express.cookieParser(expressSecret));
appSecure.use(express.bodyParser());
appSecure.use(express.methodOverride());
appSecure.set('port', port); 
appSecure.use(express.session({ secret: expressSecret, store: sessionStore, key:'expressSid', cookie: { maxAge : 604800, domain:'.domain.com'}})); 
appSecure.use(passport.initialize());
appSecure.use(passport.session());
appSecure.use(appSecure.router);
appSecure.use(express.static(__dirname + '/public'));
appSecure.use(express.errorHandler());
});

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

passport.deserializeUser(function( user, done ) {
    done( null, user );
});
提问于
用户回答回答于

将Redis实现为会话存储与护照的实现无关,它只处理存储会话数据的位置。

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

passport.deserializeUser(function(id, done) {
  User.findById(id, function(err, user) {
    done(err, user);
  });
});

在上面的例子中passport.serializeUser()提供了一个接受两个参数的函数,即用户配置文件(user)和回调函数(done那就是。回调函数的第二个参数是标识信息(user.id,但是如果您使用MongoDB,这可能是user._id)需要从数据库中恢复帐户。这将在每个经过身份验证的请求上调用,并将标识信息存储在会话数据中。

passport.deserializeUser()提供了一个函数,该函数还接受两个参数,即标识信息(id)和回调函数(done那就是。标识信息是在上一次请求中序列化到会话数据的信息(user.id那就是。这里的回调函数要求用户配置文件作为其第二个参数,或者在检索概要文件时出现的任何错误,作为它的第一个参数。大User.findById()函数是数据库中用户配置文件的查找函数。在这个例子中User对象是一个猫鼬模型的实例,该模型具有findByid()功能。

提供给passport.deserializeUser()被护照中间件调用,passport.session()在存储用户配置文件的路由处理之前(user()req.user

将Redis实现为会话存储

使用Redis的目的是存储会话数据服务器端,因此存储的客户端数据只有会话ID。同样,如何实现护照无关,只要在应用程序中添加了会话支持,护照就不关心会话数据存储在哪里。

热门问答

怎样实现PDF文件在线浏览?

幻象丛林RESTful 服务开发者
推荐
一般浏览器自带pdf浏览,比如谷歌浏览器,你打开pdf结尾的文件就是浏览界面。 存放在cos中的pdf文件打开如果是直接下载的话,需要设置静态网站,才能正常访问存储桶中的文件,而不是直接下载。 开启静态网站配置后,您需要使用静态网站域名访问 COS 源站才能生效,如果使用 COS...... 展开详请

扩展能力之云调用,小程序端出错:[tcb-js-sdk]参数错误:非法的应用标识?

software微软、谷歌、腾讯、阿里、百度……
推荐
您好,appSign必须是小程序的appid,appSecret的两个字段必须是在云开发控制台-安全来源里配置过的。 image.png ... 展开详请

mysql 1h1g能带动多大的数据?

学生路人
推荐
您好,MySQL的处理速度主要看内存的缓存空间大小,缓存空间是否够用主要看业务热数据,而业务热数据是与业务访问相关的,腾讯云MySQL的存储引擎是固定的,都是innodb存储引擎,所以处理器这里不用考虑太多,主要关注innodb_buffer_pool_size是否够用,建议您先...... 展开详请

serverless db 如何管理?

Richel码农
推荐
1.支持pg_dump,psql工具进行数据导入和导出。 2.本地CLI,可以使用postgresql的客户端psql,也可以使用dbeavr,navicate,pgadmin等工具访问。 3.支持操作DB ,要自己写逻辑 ... 展开详请

安卓APP使用免费版加固后,在Android11系统上运行闪退,是什么原因?

hello,目前已经适配了Android R Beta1,预计这周内上线移动应用安全在线版,请留意日志更新

请问bugly上报的服务器是在哪?如果要发行海外版本,能把上报服务器调成海外吗?

所属标签

扫码关注云+社区

领取腾讯云代金券