kavalanche / security
Security component for web applications
Requires
- php: >=7.4
Requires (Dev)
- phpunit/phpunit: ^8.4
This package is auto-updated.
Last update: 2025-10-17 20:20:49 UTC
README
Simple security library for web applications.
Usage
Require
kavalanche/security.composer require kavalanche/securityCreate
UserProvider. Refer to Custom UserProvider section.Create instance of
Kavalanche\Security\Service\RememberUserService.Create instance of
AuthenticationProviderand inject yourUserProviderandRememberUserServiceinto it.$authenticationProvider = new Kavalanche\Security\Provider\AuthenticationProvider($userProvider, $rememberUserService);Check if user is authenticated.
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 } }You can specify
redirect-pathinsecurity.yamlor pass desired path to$_SESSION['redirect-path']. Default is/.By default expected login form field names are
emailandpassword.You can change them by creating a config file named
{app_root}/config/security.yamland setting these variables:login-form-identifier-fieldfor identifier fieldlogin-form-password-fieldfor password field
Don't forget to put
session_start()at the beginning of your file.
Custom UserProvider
If you want to user different UserProvider, you can create your. It must implement 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.');
}
}
You can configure identifier type in your {app_root}/config/security.yaml file by setting identifier variable. Possible values are: email, username.
Remember user
From version v1.1.0 there is a possibility to add Remember me checkbox to login form. This option sets a cookie in user's browser and logs him in automatically.
Default configuration:
login-form-remember-me-field: "rememberme"remember-me-cookie-lifetime: 2592000 # 30 days
Password reset
From version v2.0.0 there is a new functionality of resetting user password. You can use it as follows:
- Add route to form with
emailfield (configurable) - Check default email template and replace it with your own if needed (
password-reset-mail-templatein configuration file) - Add route to send email that includes code:
# 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
- Add new password handling route that includes code:
# 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
Other informations
- It's your obligation to ensure that the usernames are unique.
- You can use this library however you want. To secure the whole application or just some routes.
- You can add multiple roles to each user. Simply assign an array with roles or permissions with
$user->setRoles()setter.
To do
- Implement some kind of request abstraction to encapsulate Requests (symfony/http-foundation?)
- Add helper to check permissions