Maison >développement back-end >tutoriel php >Symfony2 Pré-enregistrement et système d'invitation
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.
Caractéristiques de clé:
security.yml
. 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!