Para realizar login con la Base de Datos en YII2, debemos editar el archivo “User.php” ubicado en la carpeta “models”, en mi caso he creado una tabla llamada Users y he generado el modelo y el controlador de la tabla (Users) por medio de GII, en esta tabla he creado los usuarios con sus contraseñas .

Modelo de tabla Users (models/users.php)

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "Users".
 *
 * @property integer $id_user
 * @property string $username
 * @property string $apellido
 * @property string $passwd
 * @property string $correo
 * @property integer $id_rol
 *
 * @property DashboardMedia[] $dashboardMedia
 * @property Inscritos[] $inscritos
 * @property Notas[] $notas
 * @property Roles $idRol
 */
class Users extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'Users';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['passwd'], 'string'],
            [['id_rol'], 'integer'],
            [['username', 'apellido'], 'string', 'max' => 30],
            [['correo'], 'string', 'max' => 50]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id_user' => 'Id User',
            'username' => 'Username',
            'apellido' => 'Apellido',
            'passwd' => 'Passwd',
            'correo' => 'Correo',
            'id_rol' => 'Id Rol',
        ];
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getDashboardMedia()
    {
        return $this->hasMany(DashboardMedia::className(), ['id_autor' => 'id_user']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getInscritos()
    {
        return $this->hasMany(Inscritos::className(), ['cod_usuario' => 'id_user']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getNotas()
    {
        return $this->hasMany(Notas::className(), ['cod_usuario' => 'id_user']);
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getIdRol()
    {
        return $this->hasOne(Roles::className(), ['id_rol' => 'id_rol']);
    }
}

Ahora quiero que cada vez que realizo un login, consulte a la tabla Users y valide el nombre del usuario con su contraseña. Para esto editamos el archivo “models/user.php”, tiene un nombre similar al modelo anterior solo que el otro posee una ‘s’ (users != user) y users.php pertenece a la tabla con los usuarios y user.php pertenece al modelo para realizar login que trae por defecto Yii.

Editamos “model/user.php” dejándolo de la siguiente forma:

&lt;?php

namespace app\models;

class User extends \yii\base\Object implements \yii\web\IdentityInterface
{
    public $id_user;
    public $username;
    public $apellido;
    public $correo;
    public $id_rol;
    public $passwd;
    public $authKey;
    public $accessToken;

    /*
    private static $users = [
        &#039;100&#039; =&gt; [
            &#039;id&#039; =&gt; &#039;100&#039;,
            &#039;username&#039; =&gt; &#
039;admin&#039;,
            &#039;password&#039; =&gt; &#039;admin&#039;,
            &#039;authKey&#039; =&gt; &#039;test100key&#039;,
            &#039;accessToken&#039; =&gt; &#039;100-token&#039;,
        ],
        &#039;101&#039; =&gt; [
            &#039;id&#039; =&gt; &#039;101&#039;,
            &#039;username&#039; =&gt; &#039;demo&#039;,
            &#039;password&#039; =&gt; &#039;demo&#039;,
            &#039;authKey&#039; =&gt; &#039;test101key&#039;,
            &#039;accessToken&#039; =&gt; &#039;101-token&#039;,
        ],
    ];*/

    /**
     * @inheritdoc
     */
    public static function findIdentity($id)
    {
        //return isset(self::$users[$id]) ? new static(self::$users[$id]) : null;
        $users = Users::find()-&gt;where([&#039;id_user&#039;=&gt;$id])-&gt;one();
        if(!count($users)){
          return null;
        }
        else{
          //this-&gt;password=$users-&gt;passwd;
          return new static($users);
        }
    }

    /**
     * @inheritdoc
     */

    public static function findIdentityByAccessToken($token, $type = null)
    {
        foreach (self::$users as $user) {
            if ($user[&#039;accessToken&#039;] === $token) {
                return new static($user);
            }
        }

        return null;
    }

    /**
     * Finds user by username
     *
     * @param  string      $username
     * @return static|null
     */
    public static function findByUsername($username)
    {
        $users= Users::find()-&gt;where([&#039;username&#039; =&gt; $username])-&gt;one();
        if(!count($users)){
          return null;
        }
        else{
          return  new static ($users);
        }
    }

    /**
     * @inheritdoc
     */
    public function getId()
    {
        return $this-&gt;id_user;
    }

    /**
     * @inheritdoc
     */

    public function getAuthKey()
    {
        return $this-&gt;authKey;
    }

    /**
     * @inheritdoc
     */

    public function validateAuthKey($authKey)
    {
        return $this-&gt;authKey === $authKey;
    }

    /**
     * Validates password
     *
     * @param  string  $password password to validate
     * @return boolean if password provided is valid for current user
     */
     /*
    public function validatePassword($password, $username)
    {
        //return $this-&gt;password === $password;
        $passwd_aut=Users::find()-&gt;where([&#039;username&#039;=&gt;$username, &#039;passwd&#039;=&gt;$password]);
        if(passwd_aut){
          return true;
        }
        else{
          return false;
        }
    }*/
    public function validatePassword($password) {
        return $this-&gt;passwd === $password;
    }
}

El archivo “models/Loginform.php” no lo tocamos.

Con esto cada vez que realizamos login esteremos consultando a la tabla Users 🙂

Saludos