tatter / imposter
为 CodeIgniter 4 模拟认证
资助包维护!
tattersoftware
paypal.me/tatter
Requires
- php: ^7.4 || ^8.0
- tatter/users: ^1.2
Requires (Dev)
- codeigniter4/devkit: ^1.0
- codeigniter4/framework: ^4.1
Provides
This package is auto-updated.
Last update: 2024-09-18 06:28:17 UTC
README
为 CodeIgniter 4 模拟认证
快速入门
- 使用 Composer 安装:
> composer require --dev tatter/imposter - 通过服务访问:
$user = service('auth')->user();
描述
Imposter 为需要认证的 CodeIgniter 应用程序提供了一层薄的认证层,用于测试。这个库仅用于 测试目的。小巧的体积和易于使用的接口使其非常适合快速处理模拟认证。
Imposter 满足所有 CodeIgniter 认证指南,因此为 codeigniter4/authentication-implementation 提供了 Composer 提供的配置。
安装
通过 Composer 安装以利用 CodeIgniter 4 的自动加载功能,并始终保持最新状态
> composer require tatter/imposter
或者,通过下载源文件并将其添加到 app/Config/Autoload.php 中进行手动安装。
用法
使用服务进行用户登录或登出。
service('auth')->login($userId); service('auth')->logout();
可以通过获取 ID 或用户来检查当前状态;如果没有用户认证,两者都将为 null。
if ($user = service('auth')->user()) { echo 'Logged in!'; }
您还可以加载助手以使用如 CodeIgniter 认证指南 中所述的 user_id() 便利方法。
helper('auth'); if ($userId = user_id()) { return true; } throw new RuntimeException('You must be authenticated!');
用户
Imposter 随附了一组与 Tatter\Users 完全兼容的类。这意味着任何使用 Tatter\Users 接口的库或项目都可以使用 Imposter 进行测试,而无需实际的认证库或数据库。
用户实体
Tatter\Imposter\Entities\User 实体类实现了来自 Tatter\Users 的所有三个实体接口:UserEntity、HasGroup 和 HasPermission。使用它就像使用任何常规实体一样,除了 $groups 和 $permissions 属性是用于存储实体关系的简单 CSV 转换。
$user = new \Tatter\Imposter\Entities\User(); $user->groups = ['Administrators', 'Editors'];
Imposter 工厂
ImposterFactory 类允许 UserProvider 在测试期间自动使用 Imposter 类。要启用 ImposterFactory,请将其添加到测试的 setUp 或 setUpBeforeClass 阶段中的提供者列表。
<?php use CodeIgniter\Test\CIUnitTestCase; use Tatter\Imposter\Factories\ImposterFactory; use Tatter\Users\UserProvider; final class UserWidgetTest extends CIUnitTestCase { public static function setUpBeforeClass(): void { UserProvider::addFactory(ImposterFactory::class, ImposterFactory::class); } ...
由于 Imposter 是无数据库解决方案,因此 UserFactory 有自己的本地存储用于 User 实体。使用静态方法操作存储以安排您的测试。
index()- 获取存储的当前索引add(User $user)- 将Tatter\Imposter\Entities\User对象添加到存储中,返回新的索引reset()- 重置存储和索引fake()- 使用 Faker 生成数据返回新的Tatter\Imposter\Entities\User对象(注意:不会添加到存储中)
例如
protected function setUp(): void { parent::setUp(); $user = ImposterFactory::fake(); $user->permissions = ['widgets.create']; UserFactory::add($user); $this->userId = ImposterFactory::index(); } protected function tearDown(): void { parent::tearDown(); ImposterFactory::reset(); } public testUserCanCreateWidget() { $user = service('users')->findById($this->userId); service('auth')->login($user); ...