Projekt z wykorzystaniem yii2 - część X.


W poprzednim wpisie określiliśmy klasę jaka jest odpowiedzialna za logikę logowania oraz interfejs jaki będziemy wykorzystywać. Z procesem logowania związanych jest bezpośrednio kilka plików:

app\models\User.php – z klasą User,
app\models\LoginForm.php – z walidacją formularza, 
app\controllers\SiteController.php – z akcjami Login oraz Logout,
app\views\site\login.php – z formularzem logowania.

Po instalacji frameworka możemy zalogować się do aplikacji przy pomocy hasła i loginu znajdującego się w tablicy umieszczonej w pliku User.php. Tą sytuację chcemy zmienić i nasze dane (hasło, login) przechowywać w bazie danych w tablicy user. Generalnie zmianie ulegnie klasa User. Jest to związane z tym, że od tej pory będziemy korzystali z bazy danych. Dlatego też ta klasa musi być rozszerzeniem klasy ActiveRecord. Ponadto niektóre metody muszą być dostosowane do korzystania z naszej tabeli user przez zastosowanie metody findOne z odpowiednimi parametrami.

 

namespace app\models;

use Yii;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class User extends ActiveRecord implements IdentityInterface
{
    public static function tableName() {
        return 'user';
    }

    public static function findIdentity($id)
    {
        return static::findOne(['id'=>$id]);
    }

   public static function findIdentityByAccessToken($token, $type = null)
    {
      return static::findOne(['access_token'=>$token]);
    }


    public static function findByUsername($username)
    {
        return static::findOne(['username'=>$username]);
    }


    public function getId()
    {
        return $this->getPrimaryKey();
    }


    public function getAuthKey()
    {
        return $this->auth_key;
    }


    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }


    public function validatePassword($password)
    {

        return Yii::$app->security->validatePassword($password,$this->password_hash);
    }


     public function setPassword($password)
    {
        $this->password_hash = Yii::$app->security->generatePasswordHash($password);
    }


    public function generateAuthKey()

    {
        $this->auth_key = Yii::$app->security->generateRandomString();
    }
}

 

Po dokonanych zmianach i umieszczeniu hasła (haszowane metodą bycrypt) oraz loginu w bazie możemy przetestować aplikację.

Utworzone pliki można zobaczyć na githubie pod adresem projektu: Projekt menu: klasa User


images

Tablica $users w klasie User.



images

Testowanie logowania.



2018-02-07   Ator: bronco-one

Kategoria:   yii   php  


Ta strona używa plików cookies.    Nota prawna    Zarządzanie plikami cookies    AKCEPTUJĘ