Go语言JWT认证时VerifyToken解析token返回nil该如何解决
问题修复方案
存在的问题及对应解决方法
- 语法拼写错误
你在CreateToken函数生成刷新token的逻辑中,定义的claims变量名为rfClaims,但给user_id赋值时错误写成了fClaims["user_id"] = userId,变量名缺少前缀r,该错误会直接导致编译失败,将其修改为rfClaims["user_id"] = userId即可修复。 - .env配置未正确加载
Go语言默认不会自动读取项目下的.env文件,你需要手动引入加载工具才能让os.Getenv读取到对应配置:- 安装dotenv加载库:
go get github.com/joho/godotenv- 在
main函数启动的最开头添加加载逻辑:
import "github.com/joho/godotenv" func main() { err := godotenv.Load() if err != nil { log.Fatalf("加载.env文件失败: %v", err) } // 后续原有逻辑 } - 密钥值存在多余字符
你.env文件中的配置值带了双引号,部分版本的dotenv加载工具会把引号也识别为值的一部分,导致签名和验签使用的密钥不一致。可以在启动时打印密钥确认内容是否符合预期:
如果输出包含多余的双引号或者前后空格,将fmt.Println("ACCESS_SECRET值为:", os.Getenv("ACCESS_SECRET")).env文件的配置修改为不带引号的格式即可:ACCESS_SECRET = jdnfksdmfksd REFRESH_SECRET = mcmvmkmsdnfsdmfdsjf - 缺少错误定位日志
你目前只打印了token字符串,没有打印jwt解析的错误信息,在VerifyToken函数的错误分支添加错误打印可以快速定位具体问题:if err != nil { fmt.Println("token解析错误:", err) // 新增该行打印错误详情 return nil, err }
内容的提问来源于stack exchange,提问作者Musa Abdulhameed
相关产品推荐
相关产品推荐

