jueves, 19 de febrero de 2015

Yii Framework 2 - User (Autenticar usuarios)




En el capítulo anterior vimos como registrar usuarios en la tabla users y como éstos tenían que activar su cuenta a través de un link de confirmación que es enviado a su correo electrónico, en este capítulo nos centramos en la autenticación de usuarios a través del modelo User, que contiene las herramientas necesarias para crear un correcto sistema de autenticado de usuarios, el objetivo es modificar el modelo User que viene por defecto en la aplicación esqueleto de Yii2 para adecuarlo correctamente a la tabla users generando las consultas que correspondan mediante ActiveRecord.

yii\web\User: http://www.yiiframework.com/doc-2.0/yii-web-user.html
yii\web\IdentityInterface: http://www.yiiframework.com/doc-2.0/yii-web-identityinterface.html

El código con las modificaciones en models/User.php ...

<?php

namespace app\models;

class User extends \yii\base\Object implements \yii\web\IdentityInterface
{
    
    public $id;
    public $username;
    public $email;
    public $password;
    public $authKey;
    public $accessToken;
    public $activate;

    /**
     * @inheritdoc
     */
    
    /* busca la identidad del usuario a través de su $id */

    public static function findIdentity($id)
    {
        
        $user = Users::find()
                ->where("activate=:activate", [":activate" => 1])
                ->andWhere("id=:id", ["id" => $id])
                ->one();
        
        return isset($user) ? new static($user) : null;
    }

    /**
     * @inheritdoc
     */
    
    /* Busca la identidad del usuario a través de su token de acceso */
    public static function findIdentityByAccessToken($token, $type = null)
    {
        
        $users = Users::find()
                ->where("activate=:activate", [":activate" => 1])
                ->andWhere("accessToken=:accessToken", [":accessToken" => $token])
                ->all();
        
        foreach ($users as $user) {
            if ($user->accessToken === $token) {
                return new static($user);
            }
        }

        return null;
    }

    /**
     * Finds user by username
     *
     * @param  string      $username
     * @return static|null
     */
    
    /* Busca la identidad del usuario a través del username */
    public static function findByUsername($username)
    {
        $users = Users::find()
                ->where("activate=:activate", ["activate" => 1])
                ->andWhere("username=:username", [":username" => $username])
                ->all();
        
        foreach ($users as $user) {
            if (strcasecmp($user->username, $username) === 0) {
                return new static($user);
            }
        }

        return null;
    }

    /**
     * @inheritdoc
     */
    
    /* Regresa el id del usuario */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @inheritdoc
     */
    
    /* Regresa la clave de autenticación */
    public function getAuthKey()
    {
        return $this->authKey;
    }

    /**
     * @inheritdoc
     */
    
    /* Valida la clave de autenticación */
    public function validateAuthKey($authKey)
    {
        return $this->authKey === $authKey;
    }

    /**
     * Validates password
     *
     * @param  string  $password password to validate
     * @return boolean if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        /* Valida el password */
        if (crypt($password, $this->password) == $this->password)
        {
        return $password === $password;
        }
    }
}


Ver el vídeo tutorial de Yii Framework 2 en Youtube





1 comentario:

Unknown dijo...

Buenas tardes.... llevo todo el tutorial bien hasta este punto, pero cuando me intento logear me da el erro de usuario o password incorrecto. Que debo hacer..?