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); ...