damienharper / user-bundle
用户包
1.4.3
2021-03-08 22:18 UTC
Requires
- php: ^7.3
- doctrine/orm: ^2.7
- symfony/form: ^4.3|^5.0
- symfony/framework-bundle: ^4.3|^5.0
- symfony/mailer: ^4.3|^5.0
- symfony/routing: ^4.3|^5.0
- symfony/security-bundle: ^4.3|^5.0
- symfony/twig-bundle: ^4.3|^5.0
- twig/twig: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- phpstan/phpstan: ^0.12
- phpstan/phpstan-doctrine: ^0.12
- phpstan/phpstan-symfony: ^0.12
- symfony/validator: ^4.3|^5.0
Suggests
- scheb/two-factor-bundle: Two factor authentication bundle
- symfony/validator: To use validation on ExtendedUserTrait
Conflicts
- doctrine/persistence: <1.3
README
这个包简单方便,可以让您轻松地添加到您的应用程序中以下功能:
- 用户认证
- 密码重置
- 锁定用户账户
- 用户账户过期
- 在首次连接时强制用户重置密码
注意:
- 此包假设您正在使用Doctrine来持久化和检索您的用户。它提供了一个Doctrine UserProvider。
- 如果您需要双因素认证(2FA),此包与TwoFactorBundle配合良好
- 此包受到FOSUserBundle的启发
安装
使用Symfony Flex的应用程序
打开命令行,进入您的项目目录,然后执行
$ composer require damienharper/user-bundle
不使用Symfony Flex的应用程序
步骤 1: 下载包
打开命令行,进入您的项目目录,然后执行以下命令以下载此包的最新稳定版本
$ composer require damienharper/user-bundle
此命令要求您全局安装Composer,请参阅Composer文档中的安装章节。
步骤 2: 启用包
然后,通过将其添加到项目中的app/AppKernel.php
文件中注册的包列表中来启用包
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new DH\UserBundle\DHUserBundle(), ); // ... } // ... }
配置
注意:以下配置说明针对Symfony 4应用程序。
步骤 1: 配置包
在config/packages
目录中创建一个名为dh_user.yaml
的文件,并包含以下内容。
# config/packages/dh_user.yaml dh_user: user_class: App\Entity\User # FQDN name of your user class password_reset: email_from: john.doe@gmail.com # Sender of the password reset requests token_ttl: 7200 # TTL of a password reset request
注意:
- 默认情况下,此包假设您的用户类名为
App\Entity\User
步骤 2: 设置路由
编辑config/routes.yaml
文件,并添加以下导入规则。
# config/routes.yaml dh_userbundle: resource: "@DHUserBundle/Controller/" type: annotation
然后,您将拥有基本的登录、请求密码重置和重置密码页面。
步骤 3: 为您的防火墙启用包
编辑config/packages/security.yaml
文件,并添加如下所示适当的块/规则,在本例中为最小配置示例。
# config/packages/security.yaml security: encoders: App\Entity\User: algorithm: bcrypt role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN providers: user_provider: id: dh_userbundle.user_provider firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false main: pattern: ^/ provider: user_provider user_checker: dh_userbundle.user_checker anonymous: true form_login: login_path: dh_userbundle_login check_path: dh_userbundle_login logout: true # Easy way to control access for large sections of your site # Note: Only the *first* access control that matches will be used access_control: - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/password-reset, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/lost-password, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, role: ROLE_ADMIN }
步骤 4: 创建(或更新)您的用户类
用户类必须是实体(Doctrine的方式),这意味着一个简单的类,包含映射到数据库表中列的属性。
您的用户类必须实现一些接口才能与包一起使用
DH\UserBundle\Security\UserInterface
列出了包期望可调用的方法\Serializable
关于用户实例的序列化和反序列化
此外,一些属性由包所必需,并且作为一个方便之处,包提供了您可以在用户类中使用的两个特质来最小化您的工作
DH\UserBundle\Model\ExtendedUserTrait
包含所有由包所必需的属性和方法。DH\UserBundle\Model\UserTrait
只包含最少的,剩下的必需属性和方法由您实现(然后您可以使用ExtendedUserTrait
作为示例)
使用ExtendedUserTrait
的用户类示例
<?php namespace App\Entity; use DH\UserBundle\Model\ExtendedUserTrait; use DH\UserBundle\Security\UserInterface; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\Entity(repositoryClass="App\Repository\UserRepository") * @ORM\Table(name="user") * @UniqueEntity(fields="email", message="Email already registered.") * @UniqueEntity(fields="username", message="Username already registered.") */ class User implements UserInterface, \Serializable { use ExtendedUserTrait; /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string") * @Assert\NotBlank() */ private $fullName; public function getId(): int { return $this->id; } public function setFullName(string $fullName): void { $this->fullName = $fullName; } public function getFullName(): ?string { return $this->fullName; } }
许可证
UserBundle可免费使用,并受MIT许可证许可。