kavalanche / security
网络应用的安全组件
Requires
- php: >=7.4
Requires (Dev)
- phpunit/phpunit: ^8.4
This package is auto-updated.
Last update: 2024-09-17 18:01:22 UTC
README
网络应用的简单安全库。
用法
需要
kavalanche/security
。composer require kavalanche/security
创建
UserProvider
。请参阅自定义 UserProvider 部分。创建
Kavalanche\Security\Service\RememberUserService
的实例。创建
AuthenticationProvider
的实例,并将您的UserProvider
和RememberUserService
注入其中。$authenticationProvider = new Kavalanche\Security\Provider\AuthenticationProvider($userProvider, $rememberUserService);
检查用户是否已认证。
try { $user = $authenticationProvider->authenticate(); } catch (Kavalanche\Security\Exception\SecurityException $ex) { // if you want to allow unauthenticated users, then assign false or null to $user // if you require user to be authenticated do as follows if (!$e instanceof Kavalanche\Security\Exception\UserNotAuthenticatedException) { // put message in flash session and redirect to user form // or do whatever your use case demands } }
您可以在
security.yaml
中指定redirect-path
或将期望的路径传递给$_SESSION['redirect-path']
。默认是/
。默认情况下,预期的登录表单字段名称是
email
和password
。您可以通过创建一个名为
{app_root}/config/security.yaml
的配置文件并设置这些变量来更改它们login-form-identifier-field
用于标识字段login-form-password-field
用于密码字段
不要忘记在文件开始处放置
session_start()
。
自定义 UserProvider
如果您想使用不同的 UserProvider,您可以创建自己的。它必须实现 Kavalanche\Security\Interface\UserProviderInterface
。
class UserProvider implements Kavalanche\Security\Interface\UserProviderInterface {
public function loadUser($identifier) {
// Fetch your User
// Don't forget which type of identifier you defined in `security.yaml`
// You can create your own User class (it must implement Kavalanche\Security\UserInterface)
if ($user instanceof Kavalanche\Security\UserInterface) {
return $user;
}
throw new Kavalanche\Security\Exception\SecurityException('Invalid username.');
}
}
您可以通过在 {app_root}/config/security.yaml
文件中设置 identifier
变量来配置标识类型。可能的值有:email、username。
记住用户
从版本 v1.1.0
开始,可以在登录表单中添加 记住我
复选框。此选项会在用户的浏览器中设置一个cookie,并自动登录。
默认配置
login-form-remember-me-field
: "rememberme"remember-me-cookie-lifetime
: 2592000 # 30 days
密码重置
从版本 v2.0.0
开始,新增了用户密码重置的功能。您可以按照以下方式使用它
- 添加包含
email
字段(可配置)的表单的路由 - 检查默认的电子邮件模板,如有需要,请将其替换为您自己的(在配置文件中的
password-reset-mail-template
) - 添加发送包含代码的电子邮件的路由
# You must create a service for sending e-mails that implements Kavalanche\Security\Interfaces\MailerInterface
$passwordResetService = new Kavalanche\Security\Service\PasswordResetService($passwordResetRepo, $userProvider, $mailer);
# Form data is handled internally if you use correctly configured fields (please refer to parameters.yaml file)
$passwordResetService->processResetRequest();
# You can redirect user according to the output of this method
- 添加包含代码的新密码处理路由
# Form data is handled internally if you use correctly configured fields (please refer to parameters.yaml file)
$passwordResetService->resetPassword();
# You can redirect user according to the output of this method
其他信息
- 您有责任确保用户名是唯一的。
- 您可以根据需要使用此库。为了保护整个应用或只是某些路由。
- 您可以为每个用户添加多个角色。只需通过
$user->setRoles()
设置器分配一个包含角色或权限的数组。
待办事项
- 实现某种请求抽象,以封装请求(symfony/http-foundation?)
- 添加检查权限的辅助程序