Devise 用户认证与手写 JWT 结合,提供注册、登录、刷新、登出接口
rails-api-auth-template — Rails 启动器模板
作者 rustam-tolipov
基于 Rails API-only 模式的认证启动模板,集成 Devise 与手写 JWT,提供注册、登录、刷新、登出、角色授权、限流和 Swagger 文档。
看看你的网站会是什么样
浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。
目前有 1 张原始预览,可打开完整图片查看设计细节。
截图用于了解视觉与布局,交互效果请以实际项目为准。
值得关注的模板亮点
从已有项目资料中,快速了解它的特点。
登出通过令牌黑名单使当前令牌立即失效,并记录 JTI 用于精确控制
访问令牌 1 小时、刷新令牌 7 天,支持无感续期
内置 user、moderator、admin 角色,控制器可按角色限制访问
Rack::Attack 对登录、注册和刷新接口限流
RSpec 测试与 rswag 生成的 Swagger UI 接口文档
模板详细介绍
这是一个 Rails API-only 启动模板,目标是把 Rails API 中重复的认证配置预先搭好,让开发者直接进入业务开发。模板使用 Devise 处理用户认证,JWT 为手写实现,不依赖 devise-jwt。
认证流程覆盖注册、登录、刷新令牌、受保护的个人资料接口和登出。登出会将当前令牌加入黑名单,使令牌立即失效。访问令牌有效期 1 小时,刷新令牌有效期 7 天。用户角色分为 user(默认)、moderator 和 admin,控制器可通过引入 AuthorizeRequest 与 AuthorizeRole 模块并调用 require_admin 或 require_moderator 来限制访问。
安全与运维方面,模板要求必须设置 JWT_SECRET_KEY,否则启动失败;登录、注册和刷新接口使用 Rack::Attack 限流;令牌包含 JTI 以便精确控制;迁移中为黑名单令牌、刷新令牌和用户角色建立了索引。测试使用 RSpec,接口文档通过 rswag 生成 Swagger UI。
模板尚未包含邮箱确认、密码重置、记住我令牌和 OAuth 登录,这些在 README 的待办列表中列出。使用前需自行评估安全设置、监控日志和 SSL/TLS 配置。
适合你的项目吗?
适用场景
- 需要快速搭建 Rails API 认证层,避免从零配置 Devise 与 JWT
- 为移动端或前端应用提供基于令牌的注册、登录和会话续期接口
- 在 API 中按 user、moderator、admin 角色控制接口访问权限
- 为认证接口生成 Swagger 文档并进行 RSpec 测试
适合人群
- 熟悉 Ruby on Rails 并需要 API-only 认证起点的后端开发者
- 希望直接使用 Devise 与 JWT 组合而非自行拼装认证流程的团队
- 需要角色授权、令牌黑名单和接口限流等基础安全能力的项目
上手与定制指南
结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。
- 1
点击 GitHub 的 Use this template 创建新仓库,或直接克隆后进入项目目录
- 2
执行 bundle install,按需执行 yarn install
- 3
复制 .env.example 为 .env,并设置 JWT_SECRET_KEY 等环境变量
- 4
执行 rails db:create db:migrate 初始化数据库
- 5
运行 rspec 执行测试;生成 Swagger 文档需执行 RAILS_ENV=test bundle exec rake rswag:specs:swaggerize,再启动 rails s 并访问 /api-docs
授权与来源资料
使用条件与限制
免费使用 · 保留许可声明本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。
使用时需要遵守
- 允许免费使用、修改、商用和分发该版本代码。
- 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
- 代码按现状提供;担保与责任限制以原许可证及适用法律为准。
额外费用与待核对事项
- 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
- 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
- 使用前必须设置 JWT_SECRET_KEY 环境变量,否则应用会崩溃。
- Rack::Attack 限流功能依赖 Redis,需配置 REDIS_URL(可选,但启用限流时需要)。
- 过期令牌清理需自行配置外部定时任务(如 sidekiq、cron),模板不自动执行。
- 模板尚未包含注册邮箱确认功能,需自行实现。
- 模板尚未包含密码重置功能,需自行实现。
- 模板尚未包含记住我(长期会话)功能,需自行实现。
- 模板尚未包含 OAuth 第三方登录,需自行实现。
- 生产环境需自行配置 SSL/TLS。
- 生产环境需自行配置监控与日志。
- 使用前需根据自身场景审查安全设置。
查看原文依据
Permission is hereby granted, free of charge
许可证原文
JWT_SECRET_KEY must be set (crashes if missing)
README 原文
REDIS_URL=your_redis_url (optional, for rack-attack)
README 原文
add these to your scheduled jobs (sidekiq, cron, etc):
README 原文
add email confirmation for signup 📧
README 原文
add password reset functionality 🔑
README 原文
add remember me token (long-lived sessions) 💾
README 原文
add oauth providers (google, github, etc) 🔗
README 原文
configure ssl/tls in production
README 原文
set up proper monitoring and logging
README 原文
https://github.com/rustam-tolipov/rails-api-auth-template/blob/main/LICENSEhttps://github.com/rustam-tolipov/rails-api-auth-template/blob/main/README.mdreview security settings for your specific use case
README 原文
DeepSeek 根据仓库许可证和 README 整理 ·2026-10-13。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。
项目核对记录与介绍依据
模板资料
- 来源平台
- GitHub
- 资料与维护参考分
- 资料较完整 · 83 / 100
- 技术栈
- Rails
- 网站类型
- 启动器
这个分数如何计算
本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。
这个项目需要核对什么
- 记录的仓库更新时间
- 2026-01-28
- 截图检查日期
- 2026-10-13
已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。
目录记录的主要技术栈是 Rails。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。
查看具体选型方法 →介绍的制作与核对状态
介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。
审核声明: [email protected] · 2026-10-13
查看当时使用的来源资料
SHA-256: a4f442ef87334564c9bf0eb9ac7c8687769d0d57eaa8f142202709ab60a3e1d2
2026-10-13T04:39:16.352Z
来源文件 / 仓库



# rails-api-auth-template
> fast start rails api auth setup with devise + jwt
## 🚀 what is this?
this is a rails 7.2 api-only template with jwt authentication using devise.
you can skip the boring setup and jump straight into building cool stuff.

## 🧠 why tho?
because every time you start a new project, you forget one step.
or five.
or all of them.
this template saves you from:
* repeating the same setup 900 times
* googling “rails api jwt devise setup” again
* crying over untracked .env files
## 🔧 stack
* ruby 3.3.1
* rails 7.2.2.1 (api-only)
* devise (user auth)
* jwt (hand-rolled, no devise-jwt dependency)
* rspec + rswag (for testing + swagger docs)
* dotenv (for managing secrets)
* rack-cors (so your frontend doesn’t scream)
* rack-attack (rate limiting — no room for brute force bots)
## 🧪 how to use this as a template
1. click the green **“Use this template”** button on the top-right
2. name your new repo (e.g. `my-next-api`)
3. clone it
4. run the setup:
```bash
bundle install
cp .env.example .env
rails db:create db:migrate
```
## ⚙️ or setup as a starter project
```bash
git clone https://github.com/yourname/rails-api-auth-template.git
cd rails-api-auth-template
bundle install
yarn install # (if needed)
cp .env.example .env
rails db:create db:migrate
```
## 🔐 auth flow
### signup
```bash
POST /api/v1/signup
{
"email": "[email protected]",
"password": "123456",
"password_confirmation": "123456"
}
```
returns access token + refresh token + user json
### login
```bash
POST /api/v1/login
{
"email": "[email protected]",
"password": "123456"
}
```
returns access token + refresh token + user json
### refresh
```bash
POST /api/v1/refresh
{
"refresh_token": "<your_refresh_token>"
}
```
returns a new access token (keeps you logged in without re-entering credentials)
### profile (protected)
```bash
GET /api/v1/profile
Authorization: Bearer <your_access_token>
```
returns current user
### logout
```bash
POST /api/v1/logout
Authorization: Bearer <your_access_token>
```
blacklists the current token (real logout, token becomes invalid)
## 👥 role-based authorization
users have roles: `user` (default), `moderator`, or `admin`
### example: admin-only endpoint
```bash
GET /api/v1/admin/dashboard
Authorization: Bearer <admin_access_token>
```
returns admin dashboard data (403 forbidden for non-admins)
### using roles in your controllers
```ruby
class MyController < ApplicationController
include AuthorizeRequest
include AuthorizeRole
before_action :require_admin # only admins
# or
before_action :require_moderator # admins + moderators
end
```
## 🔒 security features
* **no secret fallbacks**: JWT_SECRET_KEY must be set (crashes if missing)
* **token blacklisting**: logout actually invalidates tokens
* **refresh tokens**: short-lived access tokens (1 hour) + long-lived refresh tokens (7 days)
* **rate limiting**: login, signup, and refresh endpoints are throttled
* **JTI tracking**: every token has a unique identifier for precise control
* **automatic cleanup**: expired tokens can be cleaned via scheduled jobs
## 📖 swagger ui
run:
```bash
RAILS_ENV=test bundle exec rake rswag:specs:swaggerize
rails s
```
open [http://localhost:3000/api-docs](http://localhost:3000/api-docs)
## 🧪 test
```bash
rspec
```
## 🚀 production considerations
### cleanup jobs
add these to your scheduled jobs (sidekiq, cron, etc):
```ruby
# clean up expired blacklisted tokens
BlacklistedToken.cleanup_expired
# clean up old refresh tokens
RefreshToken.cleanup_old_tokens
```
### environment variables
make sure to set these in production:
```bash
JWT_SECRET_KEY=your_super_secret_key_here_use_rails_secret
DATABASE_URL=your_database_url
REDIS_URL=your_redis_url (optional, for rack-attack)
```
### database indexes
migrations include proper indexes for performance:
* `blacklisted_tokens.jti` (unique)
* `blacklisted_tokens.exp`
* `refresh_tokens.token` (unique)
* `refresh_tokens.user_id + revoked`
* `users.role`
## 🤝 contribute
open to contributions, improvements, or just saying hi.
open issues or pull requests.
## ✨ features
* ✅ JWT authentication with secure token generation (includes JTI for tracking)
* ✅ Token blacklisting for real logout (tokens are invalidated on logout)
* ✅ Refresh tokens (7-day expiry, keeps users logged in securely)
* ✅ Role-based authorization (user, moderator, admin roles)
* ✅ Rate limiting with Rack::Attack (prevents brute force attacks)
* ✅ Comprehensive test coverage with RSpec
* ✅ Swagger API documentation via rswag
* ✅ Security best practices (no fallback secrets, proper validation)
## 🧼 todo
* add email confirmation for signup 📧
* add password reset functionality 🔑
* add remember me token (long-lived sessions) 💾
* add oauth providers (google, github, etc) 🔗
## 📢 shoutout
built to help devs like you (and me) avoid setup fatigue.
feel free to fork, star, share, or improve.
## ⚠️ disclaimer
this template includes production-grade features like token blacklisting, refresh tokens, and role-based auth.
however, you should still:
* review security settings for your specific use case
* set up proper monitoring and logging
* configure ssl/tls in production
* add email confirmation if needed
* implement proper error tracking
use responsibly and test thoroughly before deploying.
---
made with ♥ by rustam
看看同类模板
对比同技术栈与用途的模板,找到更适合的视觉与内容结构。

react-starter-kit
Inertia Rails React Starter Kit
Rails · 启动器

rails-tabler-starter
Free and open source Ruby on Rails starter kit built using Tabler
Rails · 后台

plutonium-core
Build production-ready Rails apps in minutes, not days. Convention-driven, fully customizable, AI-ready.
Rails · 后台

ace-template
Rails 8+ app template. Go from 0 to full-featured deployed app in less than 5 minutes (self-hosted or PaaS)
Rails · 启动器

kern
SaaS starter for Rails apps. Skip the boilerplate and start shipping the actual product.
Rails · SaaS

rails-react-starter
Simple React & Rails starter
Rails · 启动器
