如何在Ruby中使用JWT Token提取用户ID、用户名等用户信息
Ruby 从JWT Token中提取用户信息的实现方法
首先你需要安装Ruby生态中最常用的JWT处理库ruby-jwt:
- 直接安装执行命令:
gem install jwt - 如果你在Rails项目中使用,在Gemfile中添加如下内容后执行
bundle install即可:
gem 'jwt'
与你原有Django verify=False 逻辑等价的实现(不验证签名直接解码)
对应你给出的Python代码逻辑,不需要验证签名直接提取payload字段的写法如下:
require 'jwt' def get_user_id_from_token(token) # 参数说明:第四个参数指定加密算法,第三个参数false代表不验证签名 decoded_payload = JWT.decode(token, nil, false, algorithm: 'HS256')[0] # 直接取payload中对应的字段即可,要用户名就取decoded_payload['username'] decoded_payload['user_id'] end
注意:不验证签名的方式存在安全风险,仅适合本地调试、你已经在网关等上游环节完成签名校验的场景使用。
生产环境推荐实现(验证签名)
正常业务场景建议开启签名校验,避免伪造的Token被解析,写法如下:
require 'jwt' # 替换为你签发JWT时使用的HS256加密密钥 JWT_SIGN_SECRET = '你的实际签名密钥' def get_user_info_from_token(token) begin decoded_payload = JWT.decode(token, JWT_SIGN_SECRET, true, algorithm: 'HS256')[0] # 按需返回你需要的用户字段 { user_id: decoded_payload['user_id'], username: decoded_payload['username'] } rescue JWT::VerificationError, JWT::ExpiredSignature, JWT::DecodeError # 捕获签名错误、Token过期、解码失败等异常,按需做业务处理 nil end end
内容的提问来源于stack exchange,提问作者Gintma
相关产品推荐
相关产品推荐

