Comment programmer avec Yii2 Intégration de l'enregistrement de l'utilisateur

Ce que vous allez créer

Si vous demandez "Qu'est-ce que Yii?", Consultez mon tutoriel précédent: Introduction au framework Yii, qui passe en revue les avantages de Yii et inclut un aperçu des nouveautés de Yii 2.0, publié le 12 octobre 2014.

Ceci est la quatrième partie d'une série sur Yii2. Dans Programming with Yii2: Getting Started, nous avons configuré Yii2 en local, créé une application Hello World, configuré un serveur distant et utilisé Github pour déployer notre code. Dans la deuxième partie, nous avons appris comment Yii avait implémenté son architecture Model View Controller et expliqué comment créer des pages Web et des formulaires permettant de collecter et de valider des données. Dans la troisième partie, nous avons appris à utiliser les bases de données et ActiveRecord. Dans ce tutoriel, nous vous expliquerons comment intégrer un plugin d'enregistrement d'utilisateur populaire..

Pour ces exemples, nous allons continuer à construire notre application hello disponible dans le référentiel Tuts + afin que vous puissiez suivre.

Enregistrement de l'utilisateur pour votre application Web

Presque toutes les applications Web, quelle que soit leur utilité, nécessitent un enregistrement de l'utilisateur. Yii propose deux manières d'aborder l'enregistrement des utilisateurs, ces deux méthodes étant relativement simples. C’est l’une des choses que j’aime dans l’utilisation de Yii par-dessus les moments PHP-in à la vanille: je peux avoir un cadre d’applications Web complet qui permet de créer des contenus intéressants sur.

Il y a peu de raisons de reconstruire l'authentification de l'utilisateur de roue et du code et ses nombreuses exigences et fonctionnalités corollaires à partir de zéro, par exemple. envoi de courriels et authentification à des fins de vérification de l’enregistrement, de récupération de mot de passe, d’authentification sociale tierce, etc.. 

Le modèle d'application avancée Yii2 fournit un enregistrement utilisateur intégré; nous utilisons cette approche dans ma série Building Your Startup. Cependant, dans cette série, nous avons construit sur le modèle d'application de base de Yii2. Le modèle d'application de base par défaut comprend une connexion utilisateur codée en dur, ce qui n'est pas très utile.

Une autre approche de l'enregistrement des utilisateurs consiste à utiliser des extensions tierces. Pour ce tutoriel, je vais vous expliquer comment utiliser l'extension Yii2-User de Dmitry Erofeev. La documentation pour Yii2-User est disponible ici. Erofeev construit également d'autres plugins pour Yii2.

Installation de Yii2-User

Commençons par installer l'extension Yii2-User. Nous suivrons les instructions d'installation.

Installation de Yii2-User avec Composer

Premièrement, nous devons ajouter Yii2-User aux extensions requises du compositeur. Editez le fichier /composer.json pour inclure Yii2-User:

 "require": "php": "> = 5.4.0", "yiisoft / yii2": "*", "yiisoft / yii2-bootstrap": "*", "yiisoft / yii2-swiftmailer": "*" , "dektrium / yii2-user": "*",

Ensuite, lorsque nous mettrons à jour le compositeur, vous verrez quelque chose comme ceci:

Admins-MacBook-Pro-2: hello Jeff $ composer update Chargement des référentiels du compositeur avec les informations sur le paquet. Mise à jour des dépendances (y compris require-dev) - Suppression de yiisoft / yii2-composer (2.0.0) - Installation de yiisoft / yii2-composer (2.0.1) ) Téléchargement: 100%… - Installation de dektrium / yii2-user (v0.8.2) Téléchargement: 100% Écriture du fichier de verrouillage Génération de fichiers à chargement automatique

Mettre à jour la base de données

Ensuite, nous exécutons la migration de la base de données pour Yii2-User. Cela crée les tables de base de données requises par l'extension. Ceux-ci géreront les comptes d'utilisateurs et les informations d'identification.

Bonjour Jeff $ php yu Migrer / up --migrationPath = @ vendeur / dektrium / yii2-utilisateur / migrations Yii Migration Tool (basé sur Yii v2.0.1) Total 6 nouvelles migrations à appliquer: m140209_132017_init m140403_174025_create_account_table m140504_113157_update_tables m140504_130429_create_token_table m140830_171933_fix_ip_field m140830_172703_change_account_table_name Appliquer ci-dessus les migrations? (yes | no) [no]: yes *** application de m140209_132017_init> créer une table % user… done (heure: 0.010s)> créer un index unique user_unique_username sur % user (nom d'utilisateur)… done ( time: 0.015s)> créer un index unique user_unique_email sur % user (email)… done (time: 0.012s)> créer un index unique user_confirmation sur % user (id, confirmation_token)… done (time: 0.011s)> créer un index unique user_recovery sur % user (id, recovery_token)… done (heure: 0.010s)> créer une table % profile… done (heure: 0.007s)> ajouter une clé étrangère fk_user_profile : % profile (user_id) références % user (id)… terminé (heure: 0.010s) *** appliqué m140209_132017_init (heure: 0.078s) *** appliqué m140403_174025_create_account_table> créer un tableau % account… done (time: 0.008s)> créer un index unique account_unique sur % account (fournisseur, client_id)… done (time: 0.010s)> ajouter une clé étrangère fk_user_account: % account (user_id ) références % user (id)… effectuées (heure: 0.009s) *** appliqué m140403_1740 25_create_account_table (heure: 0.027s) *** application de m140504_113157_update_tables> suppression de l'index user_confirmation… done (heure: 0.007s)> suppression de l'index user_recovery… done (heure: 0.008s)> suppression de la colonne confirmation_token du tableau % user… terminé (time: 0.009s)> supprimer la colonne confirmation_sent_at de la table % user… done (heure: 0,009s)> déposer la colonne recovery_token de la table % user… done (time: 0.007s)> supprimer la colonne recovery_sent_at de la table % user… done (heure: 0.008s)> colonne de suppression log_in_from de la table % utilisateur… done (heure: 0.007s)> colonne de descente journée_in_at de la table % utilisateur… done (time: 0.008s)> renommer la colonne registered_from de la table % user en registration_ip… done (time: 0.009s)> ajouter des indicateurs de colonne entiers NOT NULL DEFAULT 0 à la table % user… done (time: 0.010s)> renommer les propriétés de colonne de la table % account en data… done (heure: 0.008s) *** appliqué m140504_113157_update_tables (heure: 0.090s) *** appliqué m140504_130429_create_token_table> c créer une table % token… done (heure: 0.006s)> créer un index unique token_unique sur % token (id_utilisateur, code, type)… done (heure: 0.010s)> ajouter une clé étrangère fk_user_token:  % token (user_id) références % user (id)… done (heure: 0,009s) *** appliqué m140504_130429_create_token_table (time: 0.026s) *** application de m140830_171933_fix_ip_field> alter column registration_ip dans le tableau  % user to bigint… done (time: 0.010s) *** appliqué m140830_171933_fix_ip_field (time: 0.011s) *** application de m140830_172703_change_table_name> renommer la table % account en % social_account en cours (time : 0.001s) *** appliqué m140830_172703_change_account_table_name (time: 0.002s) Migrée vers le haut avec succès.

Mettre à jour le fichier de configuration

Ensuite, nous devons dire à Yii d’utiliser le composant Yii2-User. Dans /config/web.php, nous remplaçons le composant utilisateur par défaut…

 'user' => ['identityClass' => 'app \ models \ User', 'enableAutoLogin' => true,], 

… Avec le composant Yii2-User:

 'user' => ['class' => 'dektrium \ user \ Module', 'enableUnconfirmedLogin' => true, 'confirmWithin' => 21600, 'cost' => 12, 'admins' => ['admin'] ], 

Activer le SwiftMailer

Étant donné que Yii2-User utilise le courrier électronique pour envoyer des confirmations d'inscription et des mots de passe oubliés, il est temps d'activer notre configuration SwiftMailer. Dans config / web.php, remplacez la configuration par défaut de Mailer ici…

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', // envoie tous les mails dans un fichier par défaut. Vous devez définir // 'useFileTransport' sur false et configurer un transport // pour que l'expéditeur envoie de vrais courriels. 'useFileTransport' => true,], 

… Avec cela, vous devrez inclure vos propres informations d'identification SMTP:

 'mailer' => ['class' => 'yii \ swiftmailer \ Mailer', 'viewPath' => '@ app / mailer', 'useFileTransport' => false, 'transport' => ['class' => ' Swift_SmtpTransport ',' host '=>' votre-host-domain par exemple smtp.gmail.com ',' nom d'utilisateur '=>' votre-email-ou-nom d'utilisateur ',' mot de passe '=>' votre-mot de passe ',' port '=>' 587 ',' cryptage '=>' tls ' ,],],

Intégration de Yii2-User

Nous devons maintenant relier notre barre de navigation aux chemins du contrôleur Yii2-User. Dans /views/layouts/main.php, nous mettons à jour la définition du tableau de la barre de navigation pour le menu Bootstrap. Remplacer la barre de navigation actuelle…

echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => [['label' => 'Home', 'url' => [ '/ site / index']], ['label' => 'Statut', 'url' => ['/ status / index']], ['label' => 'À propos de', 'url' => [ '/ site / about']], ['label' => 'Contact', 'url' => ['/ site / contact']], Yii :: $ app-> user-> isGuest? ['label' => 'Login', 'url' => ['/ site / login']]: ['label' => 'Déconnexion ('. Yii :: $ app-> utilisateur-> identité-> nom d'utilisateur. ')' , 'url' => ['/ site / logout'], 'linkOptions' => ['data-method' => 'post'],],]);

… Avec la définition de tableau suivante:

 $ navItems = [['label' => 'Home', 'url' => ['/ site / index']], ['label' => 'Status', 'url' => ['/ status / index ']], [' label '=>' À propos ',' url '=> [' / site / sur ']], [' label '=>' Contact ',' url '=> [' / site / contact ']]]; if (Yii :: $ app-> user-> isGuest) array_push ($ navItems, ['label' => 'Connexion', 'url' => ['/ user / login']], ['label' => 'Inscription', 'url' => ['/ utilisateur / registre']]);  else array_push ($ navItems, ['label' => 'Logout ('. Yii :: $ app-> utilisateur-> identité-> nom d'utilisateur. ')', 'url' => ['/ site / logout' ], 'linkOptions' => ['data-method' => 'post']]);  echo Nav :: widget (['options' => ['class' => 'navbar-nav navbar-right'], 'items' => $ navItems,]); 

Rechargez l'application et cliquez sur le bouton S'inscrire lien dans la barre de navigation. Vous devriez voir quelque chose comme ça:

Quand vous cliquez S'inscrire, vous verrez la notification de confirmation. Cela nous indique qu'un email a été envoyé sur lequel nous devons cliquer pour vérifier notre inscription..

Vous recevrez un email très semblable à celui-ci:

Cliquez sur le lien dans l'email et vous verrez quelque chose comme ceci:

Notez l'état de connexion maintenu par Yii2 et le composant Yii2-User. Il est affiché dans la barre de navigation ci-dessus. Cliquez sur Connectez - Out et parcourons le Se connecter page:

Yii2-User inclut également la récupération de mot de passe:

Juste comme ça, nous avons un composant d'authentification de base extrêmement important pour notre application.

Yii2-User possède également un certain nombre de fonctionnalités de configuration que vous pouvez explorer par vous-même, par exemple. authentification sociale de tiers. Nous y reviendrons probablement dans un prochain tutoriel.

Et après?

J'espère que vous avez trouvé cela utile pour votre propre application Web Yii2. Si vous souhaitez savoir quand le prochain tutoriel Yii2 arrive, suivez-moi @reifman sur Twitter ou consultez ma page d'instructeur. Ma page d’instructeur comprendra tous les articles de cette série dès leur publication..

Liens connexes

  • Yii2-User sur Github
  • Documentation Yii2
  • Yii Framework Site
  • Introduction au framework Yii (Tuts +)
  • Autres exemples de développeurs Yii gratuits et à code source ouvert par l'instructeur