artdevelopp/user-bundle

提供用户管理的Bundle

v2.7.3.6 2024-05-06 15:43 UTC

README

ArtDevelopp user bundle是一个简化在symfony应用中连接和管理用户的bundle。

先决条件

  • 安装symfony的security/bundle包

    composer require symfony/security-bundle
    
  • 该Bundle的模板使用Bootstrap v4.3

将Bundle添加到项目中

1- 执行命令 composer require artdevelopp/user-bundle

2- 将以下行添加到您的 "config/bundles.php" 文件末尾

ArtDevelopp\UserBundle\ArtdeveloppUserBundle::class => ['all' => true],

设置参数

/config/packages/ 目录中创建一个 artdevelopp_user.yaml 文件

artdevelopp_user:
    #paramètre obligatoire:
    mail_sender_address: 'noreply@example.net'

    #paramètre facultatif
    user_register: true #enregistrement ouvert à tous/ Par defaut true
    loginWith: 'email' #Par defaut email −> email ou username
    user_class: 'App\Entity\User' #par défaut 'App\Entity\User'
    confirm_email: true #envoi email confirmation / Par defaut true
   
    role_admin: ROLE_ADMIN #par défaut ROLE_ADMIN
    reset_role: false #remise du role par défaut après changement mot de passe −> true ou false / Par defaut: false
    default_role: ROLE_USER #role par défaut ROLE_USER

配置邮件

该Bundle使用Symfony Mailer发送邮件,请参考文档以在项目中配置:[https://symfony.com.cn/doc/current/mailer.html#transport-setup](https://symfony.com.cn/doc/current/mailer.html#transport-setup)

创建User实体

模拟创建一个未定义属性的User实体,这将创建两个文件:Entity和Repository。

替换文件User.php中的代码,位于Entity目录中,内容如下:

<?php
// src/Entity/User.php

namespace App\Entity;

use App\Repository\UserRepository;

use ArtDevelopp\UserBundle\Model\User as ModelUser;
use ArtDevelopp\UserBundle\Model\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;

#[ORM\Entity(repositoryClass: UserRepository::class)]
#[UniqueEntity('email')]
#[UniqueEntity('username')]
class User implements UserInterface, PasswordAuthenticatedUserInterface
{
    use ModelUser;

    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    public function getUserIdentifier(): string
    {

        return $this->email; //Modifier l'attribut si besoin email ou username
    }
}

执行迁移

对设置的实体执行数据库迁移

配置密码哈希器

在文件 config/packages/security.yaml 中配置password_hachers如下:

password_hashers:
    App\Entity\User:
        algorithm: auto

配置User Provider

在文件 config/packages/security.yaml 中配置User Provider:[https://symfony.com.cn/doc/current/security.html#loading-the-user-the-user-provider](https://symfony.com.cn/doc/current/security.html#loading-the-user-the-user-provider)

# config/packages/security.yaml
security:
    # ...

    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email #email ou username

配置Firewall

仍然在文件 config/packages/security.yaml 中,按以下方式配置firewall:

main:
    user_checker: ArtDevelopp\UserBundle\Security\UserChecker
    form_login:
        login_path: artdevelopp_user.login
        check_path: artdevelopp_user.login
        enable_csrf: true
    logout:
        path: app_logout

设置路由

/config/routes/ 目录中创建一个 artdevelopp_user.yaml 文件,并添加以下代码:

artdevelopp_user:
  resource: '@ArtdeveloppUserBundle/Resources/config/routes.yaml'

#Pour la déconnexion
app_logout:
  path: /app_logout
  name_prefix: app_logout

Bundle的路由

查看0-Docs/Routes_bundle.md