ion-auth 在 ci3 和 ci4 中是两个不兼容的独立实现:ci3 版基于传统 php 类与全局函数,依赖原生对象;ci4 版重构为命名空间、psr-4、依赖注入,对接新接口,api、配置、扩展性全面升级。

CodeIgniter 3 和 4 的常用权限模块(如 Ion-Auth)在设计哲学、架构依赖和功能实现上存在本质差异,不是简单“升级”,而是适配不同框架生态的独立方案。
Ion-Auth 对 CI3 和 CI4 是两个不兼容的代码库
CI3 版 Ion-Auth(v2/v3)基于传统 PHP 类与全局函数,重度依赖 $this->db、$this->session 等 CI3 原生对象;CI4 版 Ion-Auth(v4+)完全重构,使用命名空间、PSR-4 自动加载、依赖注入容器,并严格对接 CI4 的 Service、Model、SessionInterface 等新接口。二者不能混用,也不能通过修改配置“迁移”。
数据库结构与权限模型逻辑一致,但实现层脱钩
用户表、组表、权限映射关系(如 users → users_groups → groups)结构基本相同,便于数据迁移;但 CI4 版默认启用软删除、时间戳自动管理(created_at/updated_at),且所有查询必须走 Model 层(而非 CI3 的 Active Record 直接调用),SQL 构建方式完全不同。
核心 API 行为表现有细微但关键的区别
- 登录成功后,CI3 返回布尔值 + 自动写 session;CI4 返回
User实体对象,session 需显式调用session()->set()或由中间件处理 - 权限检查:CI3 用
$this->ion_auth->in_group('admin');CI4 改为$user->inGroup('admin')或auth()->user()->inGroup('admin'),强调面向对象链式调用 - 密码重置流程中,CI4 强制校验
email字段是否已验证(email_verified_at),CI3 默认关闭该开关
配置方式从数组驱动转向类配置 + 环境感知
CI3 的 config/ion_auth.php 是纯 PHP 数组;CI4 的配置分散在 app/Config/IonAuth.php(继承 BaseConfig)和 .env 中,支持环境变量覆盖(如 IONAUTH_TABLES_USERS=ci4_users),且密码哈希算法默认启用 Argon2(需 PHP 7.2+),而 CI3 仅支持 bcrypt。
扩展性与维护现状明显分化
CI3 版 Ion-Auth 已停止主动开发(最后稳定版 v3.2.0,2021 年),仅修复严重安全问题;CI4 版持续更新(最新 v4.6.0,2026 年初发布),新增 OAuth2 支持、双因素认证钩子、细粒度路由级权限注解等现代特性。官方文档也完全分离,CI4 文档明确标注“不适用于 CI3 用户”。











