damienharper/user-bundle

用户包

安装量: 9,536

依赖项: 0

建议者: 0

安全性: 0

星标: 3

关注者: 2

分支: 1

开放问题: 1

类型:symfony-bundle

1.4.3 2021-03-08 22:18 UTC

This package is auto-updated.

Last update: 2024-09-09 05:32:42 UTC


README

Latest Stable Version Latest Unstable Version Total Downloads License Monthly Downloads Daily Downloads

这个包简单方便,可以让您轻松地添加到您的应用程序中以下功能:

  • 用户认证
  • 密码重置
  • 锁定用户账户
  • 用户账户过期
  • 在首次连接时强制用户重置密码

注意:

  • 此包假设您正在使用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许可证许可。