Rails启动器

rails-api-auth-template — Rails 启动器模板

作者 rustam-tolipov

基于 Rails API-only 模式的认证启动模板,集成 Devise 与手写 JWT,提供注册、登录、刷新、登出、角色授权、限流和 Swagger 文档。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

1 个预览视图
作者提供的预览
作者提供的预览

来自项目 README 的原始预览。

目前有 1 张原始预览,可打开完整图片查看设计细节。

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-13查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

Devise 用户认证与手写 JWT 结合,提供注册、登录、刷新、登出接口

02

登出通过令牌黑名单使当前令牌立即失效,并记录 JTI 用于精确控制

03

访问令牌 1 小时、刷新令牌 7 天,支持无感续期

04

内置 user、moderator、admin 角色,控制器可按角色限制访问

05

Rack::Attack 对登录、注册和刷新接口限流

06

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启动器

适合你的项目吗?

适用场景

  • 需要快速搭建 Rails API 认证层,避免从零配置 Devise 与 JWT
  • 为移动端或前端应用提供基于令牌的注册、登录和会话续期接口
  • 在 API 中按 user、moderator、admin 角色控制接口访问权限
  • 为认证接口生成 Swagger 文档并进行 RSpec 测试

适合人群

  • 熟悉 Ruby on Rails 并需要 API-only 认证起点的后端开发者
  • 希望直接使用 Devise 与 JWT 组合而非自行拼装认证流程的团队
  • 需要角色授权、令牌黑名单和接口限流等基础安全能力的项目

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    点击 GitHub 的 Use this template 创建新仓库,或直接克隆后进入项目目录

  2. 2

    执行 bundle install,按需执行 yarn install

  3. 3

    复制 .env.example 为 .env,并设置 JWT_SECRET_KEY 等环境变量

  4. 4

    执行 rails db:create db:migrate 初始化数据库

  5. 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 原文

review security settings for your specific use case

README 原文
https://github.com/rustam-tolipov/rails-api-auth-template/blob/main/LICENSEhttps://github.com/rustam-tolipov/rails-api-auth-template/blob/main/README.md

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

来源文件 / 仓库
![Ruby](https://img.shields.io/badge/ruby-3.3.1-red)
![Rails](https://img.shields.io/badge/rails-7.2.2.1-red)
![RSpec](https://img.shields.io/badge/tested%20with-rspec-blue)
![Swagger](https://img.shields.io/badge/docs-swagger-yellow)

# 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.

![screenshot](https://github.com/user-attachments/assets/278b23fd-46d0-4085-9170-45a8da140e6f)

## 🧠 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
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。