Spanish (Español) translation by Elías Nicolás (you can also view the original English article)



Si te preguntas, "¿Qué es Yii?", Echa un vistazo a mi tutorial anterior: Introducción al Framework Yii, que revisa los beneficios de Yii e incluye una visión general de lo que es nuevo en Yii 2.0, lanzado el 12 de octubre de 2014.
Esta es la cuarta parte de una serie sobre Yii2. En la programando con Yii2: Primeros pasos, configuramos Yii2 localmente, construimos una aplicación Hello World, configuramos un servidor remoto y usamos Github para desplegar nuestro código. En la segunda parte, aprendimos sobre la implementación de Yii de su arquitectura Model View Controller y cómo construir páginas web y formularios que recopilen y validen datos. En la parte tres, aprendimos a trabajar con bases de datos y ActiveRecord. En este tutorial, le guiaremos a través de la integración de un popular complemento de registro de usuario.
Para estos ejemplos, continuaremos construyendo nuestra aplicación hola disponible en el repositorio Tuts+ para que pueda seguirlo.
Registro de usuario para su aplicación web
Casi cualquier aplicación web de cualquier utilidad requiere alguna forma de registro de usuario. Yii proporciona un par de maneras de acercarse al registro de usuarios, ambos relativamente sencillos. Esta es una de las cosas que me gusta sobre el uso de Yii sobre PHP— en momentos, puedo tener un marco de aplicaciones web completamente equipado listo para construir cosas interesantes.
Hay pocas razones para reconstruir la rueda y codificar la autenticación del usuario y sus muchos requisitos y características corolario desde cero, p. Envío de correos electrónicos y autenticación para la verificación de registro, recuperación de contraseñas, autenticación social de terceros, et al.
La plantilla de aplicación avanzada Yii2 proporciona un registro de usuario incorporado; Estamos utilizando este enfoque en la serie Construyendo su startup. Sin embargo, en esta serie, hemos estado construyendo sobre la plantilla de aplicación básica de Yii2. La plantilla de aplicación básica predeterminada incluye el inicio de sesión de usuario estatico, lo cual no es muy útil.



Otro enfoque para el registro de usuarios es el uso de extensiones de terceros. Para este tutorial, te acompañaré con la extensión Yii2-User de Dmitry Erofeev. La documentación de Yii2-User está disponible aquí. Erofeev está construyendo otros complementos para Yii2 también.



Instalación de Yii2-User
Comencemos a instalar la extensión Yii2-User. Seguiremos las instrucciones de instalación.
Instalación de Yii2-User con Composer
Primero, tenemos que añadir Yii2-User a las extensiones requeridas en composer. Edite el archivo /composer.json para incluir Yii2-User:
"require": { "php": ">=5.4.0", "yiisoft/yii2": "*", "yiisoft/yii2-bootstrap": "*", "yiisoft/yii2-swiftmailer": "*", "dektrium/yii2-user": "*" },
Entonces, cuando actualizamos el compositor, verás algo como esto:
Admins-MacBook-Pro-2:hello Jeff$ composer update Loading composer repositories with package information Updating dependencies (including require-dev) - Removing yiisoft/yii2-composer (2.0.0) - Installing yiisoft/yii2-composer (2.0.1) Downloading: 100% ... - Installing dektrium/yii2-user (v0.8.2) Downloading: 100% Writing lock file Generating autoload files
Actualizar la base de datos
A continuación, ejecutamos la migración de la base de datos para Yii2-User. Esto crea las tablas de base de datos que requiere la extensión. Éstos administrarán cuentas de usuario y credenciales.
hello Jeff$ php yii migrate/up --migrationPath=@vendor/dektrium/yii2-user/migrations Yii Migration Tool (based on Yii v2.0.1) Total 6 new migrations to be applied: 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 Apply the above migrations? (yes|no) [no]:yes *** applying m140209_132017_init > create table {{%user}} ... done (time: 0.010s) > create unique index user_unique_username on {{%user}} (username) ... done (time: 0.015s) > create unique index user_unique_email on {{%user}} (email) ... done (time: 0.012s) > create unique index user_confirmation on {{%user}} (id, confirmation_token) ... done (time: 0.011s) > create unique index user_recovery on {{%user}} (id, recovery_token) ... done (time: 0.010s) > create table {{%profile}} ... done (time: 0.007s) > add foreign key fk_user_profile: {{%profile}} (user_id) references {{%user}} (id) ... done (time: 0.010s) *** applied m140209_132017_init (time: 0.078s) *** applying m140403_174025_create_account_table > create table {{%account}} ... done (time: 0.008s) > create unique index account_unique on {{%account}} (provider,client_id) ... done (time: 0.010s) > add foreign key fk_user_account: {{%account}} (user_id) references {{%user}} (id) ... done (time: 0.009s) *** applied m140403_174025_create_account_table (time: 0.027s) *** applying m140504_113157_update_tables > drop index user_confirmation ... done (time: 0.007s) > drop index user_recovery ... done (time: 0.008s) > drop column confirmation_token from table {{%user}} ... done (time: 0.009s) > drop column confirmation_sent_at from table {{%user}} ... done (time: 0.009s) > drop column recovery_token from table {{%user}} ... done (time: 0.007s) > drop column recovery_sent_at from table {{%user}} ... done (time: 0.008s) > drop column logged_in_from from table {{%user}} ... done (time: 0.007s) > drop column logged_in_at from table {{%user}} ... done (time: 0.008s) > rename column registered_from in table {{%user}} to registration_ip ... done (time: 0.009s) > add column flags integer NOT NULL DEFAULT 0 to table {{%user}} ... done (time: 0.010s) > rename column properties in table {{%account}} to data ... done (time: 0.008s) *** applied m140504_113157_update_tables (time: 0.090s) *** applying m140504_130429_create_token_table > create table {{%token}} ... done (time: 0.006s) > create unique index token_unique on {{%token}} (user_id,code,type) ... done (time: 0.010s) > add foreign key fk_user_token: {{%token}} (user_id) references {{%user}} (id) ... done (time: 0.009s) *** applied m140504_130429_create_token_table (time: 0.026s) *** applying m140830_171933_fix_ip_field > alter column registration_ip in table {{%user}} to bigint ... done (time: 0.010s) *** applied m140830_171933_fix_ip_field (time: 0.011s) *** applying m140830_172703_change_account_table_name > rename table {{%account}} to {{%social_account}} ... done (time: 0.001s) *** applied m140830_172703_change_account_table_name (time: 0.002s) Migrated up successfully.
Actualizar el archivo de configuración
A continuación, necesitamos decirle a Yii que use el componente Yii2-User. En /config/web.php, reemplazamos el componente de usuario predeterminado ...
'user' => [ 'identityClass' => 'app\models\User', 'enableAutoLogin' => true, ],
... con el componente Yii2-User:
'user' => [ 'class' => 'dektrium\user\Module', 'enableUnconfirmedLogin' => true, 'confirmWithin' => 21600, 'cost' => 12, 'admins' => ['admin'] ],
Activar el SwiftMailer
Dado que Yii2-User usa correo electrónico para enviar confirmaciones de registro y contraseñas olvidadas, es hora de activar nuestra configuración de SwiftMailer. En config / web.php, reemplace la configuración predeterminada de Mailer aquí...
'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', // send all mails to a file by default. You have to set // 'useFileTransport' to false and configure a transport // for the mailer to send real emails. 'useFileTransport' => true, ],
... con esto—tendrás que incluir tus propias credenciales SMTP:
'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'viewPath' => '@app/mailer', 'useFileTransport' => false, 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'your-host-domain e.g. smtp.gmail.com', 'username' => 'your-email-or-username', 'password' => 'your-password', 'port' => '587', 'encryption' => 'tls', ], ],
Integración de Yii2-User
Ahora, necesitamos vincular nuestra barra de navegación a las rutas del controlador Yii2-User. En /views/layouts/main.php, actualizamos la definición de matriz de barra de navegación para el menú Bootstrap. Reemplazar la barra de navegación actual ...
echo Nav::widget([ 'options' => ['class' => 'navbar-nav navbar-right'], 'items' => [ ['label' => 'Home', 'url' => ['/site/index']], ['label' => 'Status', 'url' => ['/status/index']], ['label' => 'About', 'url' => ['/site/about']], ['label' => 'Contact', 'url' => ['/site/contact']], Yii::$app->user->isGuest ? ['label' => 'Login', 'url' => ['/site/login']] : ['label' => 'Logout (' . Yii::$app->user->identity->username . ')', 'url' => ['/site/logout'], 'linkOptions' => ['data-method' => 'post']], ], ]);
... con la siguiente definición en array:
$navItems=[ ['label' => 'Home', 'url' => ['/site/index']], ['label' => 'Status', 'url' => ['/status/index']], ['label' => 'About', 'url' => ['/site/about']], ['label' => 'Contact', 'url' => ['/site/contact']] ]; if (Yii::$app->user->isGuest) { array_push($navItems,['label' => 'Sign In', 'url' => ['/user/login']],['label' => 'Sign Up', 'url' => ['/user/register']]); } else { array_push($navItems,['label' => 'Logout (' . Yii::$app->user->identity->username . ')', 'url' => ['/site/logout'], 'linkOptions' => ['data-method' => 'post']] ); } echo Nav::widget([ 'options' => ['class' => 'navbar-nav navbar-right'], 'items' => $navItems, ]);
Vuelva a cargar la aplicación y haga clic en el enlace Sign Up en la barra de navegación. Debería ver algo como esto:



Al hacer clic en Sign Up, verá la notificación de confirmación. Esto nos indica que se ha enviado un correo electrónico al que debemos hacer clic para verificar nuestro registro.



Recibirás un correo electrónico como éste:



Haz clic en el enlace del correo electrónico y verás algo como esto:



Observe el estado de inicio de sesión mantenido por Yii2 y el componente Yii2-User—que se muestra en la barra de navegación anterior. Haga clic en Logout y vaya a través de la página de inicio de sesión:



Yii2-User también incluye recuperación de contraseña:



Al igual que eso, tenemos un componente de autenticación de núcleo enormemente importante para nuestra aplicación.
Yii2-User también tiene una serie de características de configuración que puede explorar más por su cuenta, p. Autenticación social de terceros. Probablemente regresemos a ellos en un tutorial posterior.
¿Que sigue?
Espero que haya encontrado esto útil para su propia aplicación web Yii2. Si quieres saber cuándo llega el próximo tutorial de Yii2, sígueme @reifman en Twitter o visita mi página de instructor. Mi página de instructor incluirá todos los artículos de esta serie tan pronto como se publiquen.
Enlaces relacionados
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly