控制器过滤器
提供的过滤器
注意
Shield 提供的 $aliases
过滤器会自动由位于 src/Config/Registrar.php 的 Registrar 类添加。因此,您无需在 app/Config/Filters.php 中添加。
您可以使用 Shield 提供的 控制器过滤器 来保护路由
$aliases = [
'session' => \CodeIgniter\Shield\Filters\SessionAuth::class,
'tokens' => \CodeIgniter\Shield\Filters\TokenAuth::class,
'hmac' => \CodeIgniter\Shield\Filters\HmacAuth::class,
'chain' => \CodeIgniter\Shield\Filters\ChainAuth::class,
'auth-rates' => \CodeIgniter\Shield\Filters\AuthRates::class,
'group' => \CodeIgniter\Shield\Filters\GroupFilter::class,
'permission' => \CodeIgniter\Shield\Filters\PermissionFilter::class,
'force-reset' => \CodeIgniter\Shield\Filters\ForcePasswordResetFilter::class,
'jwt' => \CodeIgniter\Shield\Filters\JWTAuth::class,
];
过滤器 | 说明 |
---|---|
session | 限制未通过 Session 身份验证器验证的用户的访问。 |
tokens | 限制未通过 AccessTokens 身份验证器验证的用户的访问。 |
chained | 该过滤器将按顺序检查身份验证器,以查看用户是否通过任一身份验证器登录,从而允许单个 API 端点同时适用于使用会话身份验证的 SPA 和使用访问令牌的移动应用程序。 |
jwt | 限制未通过 JWT 身份验证器验证的用户的访问。请参阅 JWT 身份验证。 |
hmac | 限制未通过 HMAC 身份验证器验证的用户的访问。请参阅 HMAC 身份验证。 |
auth-rates | 为身份验证相关路由的速率限制提供了良好的基础。 |
group | 检查用户是否属于传入的某个组。 |
permission | 检查用户是否具有传入的权限。 |
force-reset | 检查用户是否需要重置密码。 |
配置控制器过滤器
保护所有页面
如果您想限制所有路由(例如 localhost:8080/admin
、localhost:8080/panel
等),您需要在 app/Config/Filters.php 文件中添加以下代码。
public $globals = [
'before' => [
// ...
'session' => ['except' => ['login*', 'register', 'auth/a/*', 'logout']],
],
// ...
];
速率限制
为了帮助保护您的身份验证表单不被机器人发送垃圾邮件,建议您在所有身份验证路由上使用 auth-rates
过滤器。这可以通过以下过滤器设置来完成
public $filters = [
'auth-rates' => [
'before' => [
'login*', 'register', 'auth/*'
]
]
];
强制重置密码
如果你的应用程序需要强制密码重置功能,确保从before
全局中排除认证页面和实际的密码重置页面。这将确保你的用户不会遇到太多重定向错误。请参阅
public $globals = [
'before' => [
//...
//...
'force-reset' => ['except' => ['login*', 'register', 'auth/a/*', 'change-password', 'logout']]
]
];
在上面的示例中,假设你为用户创建的用于在成功登录后更改密码的页面是change-password。
注意
如果你对路由进行了分组或更改了默认格式,确保你的代码与app/Config/Filter.php文件中的新格式匹配。
例如,如果你像这样配置了路由
$routes->group('accounts', static function($routes) {
service('auth')->routes($routes);
});
那么session
的全局before
过滤器应该如下所示
public $globals = [
'before' => [
// ...
'session' => ['except' => ['accounts/login*', 'accounts/register', 'accounts/auth/a/*', 'accounts/logout']]
]
]
速率限制和强制密码重置也应适用。