/yii2-user

Flexible user registration and authentication module for Yii2.

Primary LanguagePHPMIT LicenseMIT

Yii2 User Extension


Flexible user registration and authentication module for Yii2

Latest Stable Version Total Downloads License Scrutinizer Code Quality Build Status

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist yii2mod/yii2-user "*"

or add

"yii2mod/yii2-user": "*"

to the require section of your composer.json file.

Actions

This extension provides several independent action classes, which provides particular operation support:

  1. [[yii2mod\user\actions\LoginAction]] - Logs in a user. The following additional parameters are available:
  • view - name of the view, which should be rendered.
  • modelClass - login model class name.
  • layout - the name of the layout to be applied to this view.
  • returnUrl - url which user should be redirected to on success.
  1. [[yii2mod\user\actions\LogoutAction]] - Logs out the current user. The following additional parameters are available:
  • returnUrl - url which user should be redirected to on success.
  1. [[yii2mod\user\actions\SignupAction]] - Signup a user. The following additional parameters are available:
  • view - name of the view, which should be rendered.
  • modelClass - signup model class name.
  • returnUrl - url which user should be redirected to on success.
  1. [[yii2mod\user\actions\RequestPasswordResetAction]] - Request password reset for a user. The following additional parameters are available:
  • view - name of the view, which should be rendered.
  • modelClass - request password model class.
  • successMessage - message to the user when the mail is sent successfully.
  • errorMessage - error message for the user when the email was not sent.
  • returnUrl - url which user should be redirected to on success.
  1. [[yii2mod\user\actions\PasswordResetAction]] - Reset password for a user. The following additional parameters are available:
  • view - name of the view, which should be rendered.
  • modelClass - reset password model class.
  • successMessage - message to be set on success.
  • returnUrl - url which user should be redirected to on success.

Configuration

  1. If you use this extension without base template, then you need execute migration by the following command:
php yii migrate/up --migrationPath=@vendor/yii2mod/yii2-user/migrations
  1. You need to configure the params section in your project configuration:
'params' => [
   'user.passwordResetTokenExpire' => 3600
]
  1. Your need to create the UserModel class that be extends of UserModel and configure the property identityClass for user component in your project configuration, for example:
'user' => [
    'identityClass' => 'yii2mod\user\models\UserModel',
    // for update last login date for user, you can call the `afterLogin` event as follows
    'on afterLogin' => function ($event) {
        $event->identity->updateLastLogin();
    }
],
  1. For sending emails you need to configure the mailer component in the configuration of your project.

  2. If you don't have the passwordResetToken.php template file in the mail folder of your project, then you need to create it, for example:

<?php

use yii\helpers\Html;

/* @var $this yii\web\View */
/* @var $user */

$resetLink = Yii::$app->urlManager->createAbsoluteUrl(['site/password-reset', 'token' => $user->password_reset_token]);
?>

Hello <?php echo Html::encode($user->username) ?>,

Follow the link below to reset your password:

<?php echo Html::a(Html::encode($resetLink), $resetLink) ?>

This template used for password reset email.

  1. Add to SiteController (or configure via $route param in urlManager):
    /**
     * @return array
     */
    public function actions()
    {
        return [
            'login' => [
                'class' => 'yii2mod\user\actions\LoginAction'
            ],
            'logout' => [
                'class' => 'yii2mod\user\actions\LogoutAction'
            ],
            'signup' => [
                'class' => 'yii2mod\user\actions\SignupAction'
            ],
            'request-password-reset' => [
                'class' => 'yii2mod\user\actions\RequestPasswordResetAction'
            ],
            'password-reset' => [
                'class' => 'yii2mod\user\actions\PasswordResetAction'
            ],
        ];
    }

You can then access to this actions through the following URL:

  1. http://localhost/site/login
  2. http://localhost/site/logout
  3. http://localhost/site/signup
  4. http://localhost/site/request-password-reset
  5. http://localhost/site/password-reset
  1. Also some actions send flash messages, so you should use an AlertWidget to render flash messages on your site.

Using action events

You may use the following events:

    /**
     * @return array
     */
    public function actions()
    {
        return [
            'login' => [
                'class' => 'yii2mod\user\actions\LoginAction',
                'on beforeLogin' => function ($event) {
                    // your custom code
                },
                'on afterLogin' => function ($event) {
                    // your custom code
                },
            ],
            'logout' => [
                'class' => 'yii2mod\user\actions\LogoutAction',
                'on beforeLogout' => function ($event) {
                    // your custom code
                },
                'on afterLogout' => function ($event) {
                    // your custom code
                },
            ],
            'signup' => [
                'class' => 'yii2mod\user\actions\SignupAction',
                'on beforeSignup' => function ($event) {
                    // your custom code
                },
                'on afterSignup' => function ($event) {
                    // your custom code
                },
            ],
            'request-password-reset' => [
                'class' => 'yii2mod\user\actions\RequestPasswordResetAction',
                'on beforeRequest' => function ($event) {
                    // your custom code
                },
                'on afterRequest' => function ($event) {
                    // your custom code
                },
            ],
            'password-reset' => [
                'class' => 'yii2mod\user\actions\PasswordResetAction',
                'on beforeReset' => function ($event) {
                    // your custom code
                },
                'on afterReset' => function ($event) {
                    // your custom code
                },
            ],
        ];
    }

Console commands

Setup

To enable console commands, you need to add module into console config of you app. /config/console.php in yii2-app-basic template, or /console/config/main.php in yii2-app-advanced.

    return [
        'id' => 'app-console',
        'modules' => [
            'user' => [
                'class' => 'yii2mod\user\ConsoleModule',
            ],
        ],

Available console actions

  • user/create - Creates a new user.
./yii user/create <email> <username> <password>

- email (required): string
- username (required): string
- password (required): string
  • user/role/assign - Assign role to the user.
./yii user/role/assign <roleName> <email>

- roleName (required): string
- email (required): string
  • user/role/revoke - Revoke role from the user.
./yii user/role/revoke <roleName> <email>

- roleName (required): string
- email (required): string
  • user/delete - Deletes a user.
./yii user/delete <email>

- email (required): string
  • user/update-password - Updates user's password to given.
./yii user/update-password <email> <password>

- email (required): string
- password (required): string

Internationalization

All text and messages introduced in this extension are translatable under category 'yii2mod.user'. You may use translations provided within this extension, using following application configuration:

return [
    'components' => [
        'i18n' => [
            'translations' => [
                'yii2mod.user' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@yii2mod/user/messages',
                ],
                // ...
            ],
        ],
        // ...
    ],
    // ...
];