A new Symfony bundle for basic user management.
- Symfony 3.4 / 4.0 ready
- E-mail / password based authentication
- User registration / E-mail confirmation
- Forgot password / Reset password / Change password
- Primary / secondary e-mails
- Disabled / enabled users
- User roles
- User attribute values
$ composer require msgphp/user-bundle
<?php
// config/packages/msgphp.php
use MsgPhp\User\Entity\User;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return function (ContainerConfigurator $container) {
$container->extension('msgphp_user', [
'class_mapping' => [
User::class => \App\Entity\User::class,
],
]);
};
And be done.
If you use SecurityBundle here's a basic setup;
# config/packages/security.yaml
security:
encoders:
MsgPhp\User\Infra\Security\SecurityUser: bcrypt
providers:
msgphp_user: { id: MsgPhp\User\Infra\Security\SecurityUserProvider }
firewalls:
main:
provider: msgphp_user
user_checker: MsgPhp\User\Infra\Security\SecurityUserChecker
anonymous: ~
In practice the security user is decoupled from your domain entity user. An approach described here.
MsgPhp\User\Infra\Security\SecurityUser
implementingSymfony\Component\Security\Core\User\UserInterface
App\Entity\User
extendingMsgPhp\User\Entity\User
Console commands from MsgPhp\User\Infra\Console\Command\*
are registered.
$ bin/console user:create
Constraint validators from MsgPhp\User\Infra\Validator\*
are registered.
<?php
// @UnqiueEmail()
private $newEmail;
// @ExistingEmail()
private $currentEmail;
Domain command handlers from MsgPhp\User\Command\Handler\*
are registered.
<?php
$messageBus->handle(new DeleteUserCommand($user->getId()));
With SimpleBusEventBusBundle
corresponding domain events are dispatched.
Twig extensions from MsgPhp\User\Infra\Twig\*
are registered.
{% if app.user %} {# the security user: `MsgPhp\User\Infra\Security\SecurityUser` #}
<p>Hello {{ msgphp_current_user().email }}</p> {# the domain user: `App\Entity\User` #}
{% endif %}
Repositories from MsgPhp\User\Infra\Doctrine\Repository\*
are registered. Corresponding domain interfaces from
MsgPhp\User\Repository\*
are aliased.