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