kavalanche/security

此包的最新版本(v2.3.0)没有可用的许可信息。

网络应用的安全组件

v2.3.0 2024-02-17 16:42 UTC

README

网络应用的简单安全库。

用法

  1. 需要 kavalanche/security

     composer require kavalanche/security
    
  2. 创建 UserProvider。请参阅自定义 UserProvider 部分。

  3. 创建 Kavalanche\Security\Service\RememberUserService 的实例。

  4. 创建 AuthenticationProvider 的实例,并将您的 UserProviderRememberUserService 注入其中。

     $authenticationProvider = new Kavalanche\Security\Provider\AuthenticationProvider($userProvider, $rememberUserService);
    
  5. 检查用户是否已认证。

     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']。默认是 /

    默认情况下,预期的登录表单字段名称是 emailpassword

    您可以通过创建一个名为 {app_root}/config/security.yaml 的配置文件并设置这些变量来更改它们

    • login-form-identifier-field 用于标识字段
    • login-form-password-field 用于密码字段
  6. 不要忘记在文件开始处放置 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 开始,新增了用户密码重置的功能。您可以按照以下方式使用它

  1. 添加包含 email 字段(可配置)的表单的路由
  2. 检查默认的电子邮件模板,如有需要,请将其替换为您自己的(在配置文件中的 password-reset-mail-template
  3. 添加发送包含代码的电子邮件的路由
# 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
  1. 添加包含代码的新密码处理路由
# 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?)
  • 添加检查权限的辅助程序