Rails JWT认证 #

一、JWT概述 #

1.1 什么是JWT #

JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。

二、安装配置 #

2.1 Gemfile #

ruby
gem 'jwt'

2.2 生成Token #

ruby
class JsonWebToken
  SECRET_KEY = Rails.application.secret_key_base
  
  def self.encode(payload, exp = 24.hours.from_now)
    payload[:exp] = exp.to_i
    JWT.encode(payload, SECRET_KEY)
  end
  
  def self.decode(token)
    decoded = JWT.decode(token, SECRET_KEY)[0]
    HashWithIndifferentAccess.new decoded
  end
end

三、使用JWT #

3.1 登录返回Token #

ruby
def login
  user = User.find_by(email: params[:email])
  
  if user&.authenticate(params[:password])
    token = JsonWebToken.encode(user_id: user.id)
    render json: { token: token }, status: :ok
  else
    render json: { error: '认证失败' }, status: :unauthorized
  end
end

3.2 验证Token #

ruby
def authorize_request
  header = request.headers['Authorization']
  token = header.split.last if header
  
  begin
    @current_user = User.find(JsonWebToken.decode(token)[:user_id])
  rescue
    render json: { error: '请登录' }, status: :unauthorized
  end
end

四、总结 #

4.1 核心要点 #

要点 说明
JWT JSON Web Token
encode 生成Token
decode 验证Token
Authorization 请求头传递

4.2 下一步 #

现在你已经掌握了JWT认证,接下来让我们学习 权限控制,深入了解Rails的授权系统!

最后更新:2026-03-28