如何控制HapiJS Cookie编码?Cookie加密不一致问题求助
排查方向与解决建议
检查全局Cookie配置
确认是否通过server.state()单独给idToken设置过全局配置。比如如果之前执行过server.state('idToken', { encrypt: false }),那么即使在h.state()传入带加密配置的参数,全局配置会优先覆盖局部配置。可以通过server.states.get('idToken')查看当前idToken的全局配置,验证加密开关是否正常开启。修复配置对象的引用问题
你提到两个Cookie的配置仅ttl不同,若你是直接修改同一个optionsObject的ttl后重复传入,可能因Hapi内部处理时修改了配置对象,导致第二个Cookie的配置异常。比如:// 错误示例:修改同一对象的属性 const options = { encrypt: true, ttl: 3600 }; h.state("idToken", JWT.token, options); options.ttl = 86400; h.state("refreshToken", refreshToken.token, options);正确做法是每次创建独立的配置对象,避免引用共享:
// 正确示例:创建独立配置对象 const baseOptions = { encrypt: true, /* 其他通用配置 */ }; h.state("idToken", JWT.token, { ...baseOptions, ttl: 3600 }); h.state("refreshToken", refreshToken.token, { ...baseOptions, ttl: 86400 });验证Token内容的影响
尝试将两个Token的值互换,即把idToken的内容传给refreshToken的h.state()调用,反之亦然,看加密行为是否随之变化。以此确认是否是Token的长度或内容本身触发了Hapi的特殊处理逻辑。检查Hapi版本的特性差异
部分旧版本的Hapi存在对短字符串Cookie跳过加密的逻辑(即使配置了encrypt: true)。可以对照你当前使用的Hapi版本官方文档,确认state方法的加密触发规则是否存在这类特殊情况。
内容的提问来源于stack exchange,提问作者TadeoArmenta
相关产品推荐
相关产品推荐

