SuperAPI AI 工具集

inertia-rails-auth

安全与审计

查看项目

更新于 10-15 20:14

技能介绍

用途:在 Inertia Rails 应用中实现登录、会话、权限与访问控制。核心原则是复用 Rails 现有认证设施,前后端同域,基于会话的认证即可,无需特殊 OAuth 或令牌。

主要能力:

  1. Devise 认证:Gemfile 添加 gem 'devise',执行 bundle install、rails generate devise:install、rails generate devise User、rails db:migrate;在 ApplicationController 用 inertia_share 共享 auth 状态(user 与 signed_in)。
  2. has_secure_password 方案:User 模型使用 has_secure_password,SessionsController 通过 session[:user_id] 登录,配合 current_user、user_signed_in?、authenticate! 辅助方法。
  3. 授权:可用 Pundit(gem 'pundit',定义 UserPolicy)或 Action Policy(gem 'action_policy',使用 allowed_to?)。前端无法访问服务端授权助手,需把权限结果作为 props 传入,如 can.create_user、user.can.edit。
  4. 历史加密:InertiaRails.configure 中 config.encrypt_history = true,或按控制器 inertia_config(encrypt_history: true)、按请求 encrypt_history: true;登出时用 clear_history: true 或 router.clearHistory()。
  5. 受保护路由:before_action :authenticate!,公开控制器用 skip_before_action;角色控制用 require_admin!。
  6. CSRF:Inertia 自动读取 XSRF-TOKEN cookie 并发送 X-XSRF-TOKEN 头,无需额外配置;Rails 侧使用 protect_from_forgery with: :exception。
  7. 注册与密码重置流程示例,密码重置始终返回成功提示以防邮箱枚举。

使用方式:按资料中的控制器、路由与 React/Vue 组件示例接入;登录组件使用 useForm 提交到 /users/sign_in 等路径。

适用场景:需要会话登录、权限控制、登出后隐藏敏感历史的 Inertia Rails 项目。

限制与最佳实践:绝不信任客户端权限检查,服务端必须用 authorize 等再次校验;共享用户数据时仅暴露必要字段;会话 cookie 建议 secure、httponly、same_site: :lax;可用 rack-attack 做登录限流。资料未提供具体版本兼容范围与性能数据。