Maison >développement back-end >tutoriel php >Symfony2 Pré-enregistrement et système d'invitation

Symfony2 Pré-enregistrement et système d'invitation

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌original
2025-02-18 12:28:11482parcourir

Symfony2: Gestion sécurisée des utilisateurs avec système de pré-inscription et d'invitation (partie 1)

Cette série en deux parties explore l'authentification et l'autorisation dans Symfony2, en se concentrant sur un système d'invitation de pré-inscription à l'accès aux utilisateurs contrôlés. Le cadre robuste de Symfony2 fournit une gestion détaillée des utilisateurs et des interactions sécurisées.

Symfony2 Pre-registration and Invite System

Caractéristiques de clé:

  • Accès contrôlé: Les administrateurs gèrent l'accès du site en invitant les utilisateurs, en créant un environnement fermé.
  • Informations d'identification sécurisées: Les données utilisateur, y compris les mots de passe hachés en toute sécurité, sont stockés dans une base de données SQL, gérée via security.yml.
  • Processus d'invitation: codes d'invitation uniques, envoyé par e-mail, vérifiez l'authenticité de l'invitation et empêchez les problèmes d'expiration.
  • Contrôle d'accès basé sur les rôles: Le système utilise des rôles (par exemple, ROLE_ADMIN, ROLE_USER) pour définir les autorisations d'accès à différents URI.

Partie 1: Configuration et configuration

Cette pièce couvre la configuration de la base de données et la configuration de sécurité. Les versements futurs détailleront les processus d'enregistrement et de connexion, ainsi que des actions post-login. Nous allons s'appuyer sur les articles précédents de point de site sur le développement de Symfony2.

Structure de la table utilisateur:

L'application utilise une base de données SQL pour stocker les informations d'identification de l'utilisateur. Le tableau user comprend des champs pour id, username, password (bcrypt hachés), email, created, logged, roles, gravatar, active, et homepage. username, password, et roles sont cruciaux pour l'authentification et l'autorisation.

<code class="language-sql">CREATE TABLE `user` (
    `id` INT(255) AUTO_INCREMENT NOT NULL,
    `username` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    `password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    `email` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    `created` DATETIME NOT NULL,
    `logged` DATETIME NULL,
    `roles` VARCHAR(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    `gravatar` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
    `active` TINYINT(1) NOT NULL,
    `homepage` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
    PRIMARY KEY (`id`)
);</code>

Configuration de sécurité (security.yml):

Le fichier security.yml configure les paramètres de sécurité de l'application:

<code class="language-yaml">security:
    providers:
        administrators:
            entity: { class: AppBundle:User, property: username }
    encoders:
        AppBundle\Entity\User:
            algorithm: bcrypt
            cost: 12
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt|error)|css|images|js)/
            security: false
        default:
            anonymous: ~
            http_basic: ~
            form_login:
                login_path: /login
                check_path: /login_check
            logout:
                path: /logout
                target: /login
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/preregister, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/create, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/invite, roles: [ROLE_ADMIN] }
        - { path: ^/, roles: [ROLE_USER, ROLE_ADMIN] }</code>

Cette configuration définit les fournisseurs d'utilisateurs, le codage de mot de passe, les mécanismes de connexion / déconnexion et des règles de contrôle d'accès basées sur les rôles.

AppBundle:User Entité:

L'entité User étend les interfaces Symfony UserInterface et Serializable, fournissant les méthodes nécessaires pour la gestion des utilisateurs. La méthode getRoles() est modifiée pour gérer les rôles en tant que chaîne séparée par des virgules, permettant plusieurs rôles à l'avenir.

Création de l'utilisateur d'administration initial:

Un utilisateur d'administration initial est créé manuellement, avec le mot de passe bcrypt-hash à l'aide d'un outil en ligne. Cet utilisateur est accordé le rôle ROLE_ADMIN.

Système d'invitation (partie 1):

Le système d'invitation permet aux administrateurs d'inviter les utilisateurs par e-mail. Le processus consiste à générer un code unique, à le stocker dans la base de données et à envoyer un e-mail avec un lien contenant le code et l'adresse e-mail de l'utilisateur.

Étapes suivantes (partie 2):

La partie 2 couvrira les processus d'enregistrement et de connexion, ainsi que des actions post-login comme la mise à jour du dernier horodatage de connexion.

Questions fréquemment posées: (Une section FAQ complète est incluse dans l'entrée d'origine et reste largement inchangé dans cette sortie.)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn