Yii - Kimlik Doğrulama

Bir kullanıcının kimliğini doğrulama sürecine authentication. Kullanıcının iddia ettiği kişi olup olmadığına karar vermek için genellikle bir kullanıcı adı ve şifre kullanır.

Yii kimlik doğrulama çerçevesini kullanmak için yapmanız gerekenler -

  • Kullanıcı uygulama bileşenini yapılandırın.
  • Yii \ web \ IdentityInterface arabirimini uygulayın.

Temel uygulama şablonu, yerleşik bir kimlik doğrulama sistemi ile birlikte gelir. Aşağıdaki kodda gösterildiği gibi kullanıcı uygulaması bileşenini kullanır -

<?php
   $params = require(__DIR__ . '/params.php'); $config = [
      'id' => 'basic',
      'basePath' => dirname(__DIR__),
      'bootstrap' => ['log'],
      'components' => [
         'request' => [
            // !!! insert a secret key in the following (if it is empty) - this
               //is required by cookie validation
            'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
         ],
         'cache' => [
            'class' => 'yii\caching\FileCache',
         ],
         'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
         ],
         //other components...
         'db' => require(__DIR__ . '/db.php'),
      ],
      'modules' => [
         'hello' => [
            'class' => 'app\modules\hello\Hello',
         ],
      ],
      'params' => $params, ]; if (YII_ENV_DEV) { // configuration adjustments for 'dev' environment $config['bootstrap'][] = 'debug';
      $config['modules']['debug'] = [ 'class' => 'yii\debug\Module', ]; $config['bootstrap'][] = 'gii';
      $config['modules']['gii'] = [ 'class' => 'yii\gii\Module', ]; } return $config;
?>

Yukarıdaki yapılandırmada, kullanıcı için kimlik sınıfı app \ models \ User olarak yapılandırılır.

Kimlik sınıfı, yii\web\IdentityInterface aşağıdaki yöntemlerle -

  • findIdentity() - Belirtilen kullanıcı kimliğini kullanarak kimlik sınıfının bir örneğini arar.

  • findIdentityByAccessToken() - Belirtilen erişim belirtecini kullanarak kimlik sınıfının bir örneğini arar.

  • getId() - Kullanıcının kimliğini döndürür.

  • getAuthKey() - Çerez tabanlı girişi doğrulamak için kullanılan anahtarı döndürür.

  • validateAuthKey() - Çerez tabanlı giriş anahtarını doğrulama mantığını uygular.

Temel uygulama şablonundaki Kullanıcı modeli, yukarıdaki tüm işlevleri uygular. Kullanıcı verileri şurada saklanır:$users özellik -

<?php
   namespace app\models;
   class User extends \yii\base\Object implements \yii\web\IdentityInterface {
      public $id;
      public $username; public $password;
      public $authKey; public $accessToken;
      private static $users = [ '100' => [ 'id' => '100', 'username' => 'admin', 'password' => 'admin', 'authKey' => 'test100key', 'accessToken' => '100-token', ], '101' => [ 'id' => '101', 'username' => 'demo', 'password' => 'demo', 'authKey' => 'test101key', 'accessToken' => '101-token', ], ]; /** * @inheritdoc */ public static function findIdentity($id) {
         return isset(self::$users[$id]) ? new static(self::$users[$id]) : null;
      }
      /**
      * @inheritdoc
      */
      public static function findIdentityByAccessToken($token, $type = null) {
         foreach (self::$users as $user) {
            if ($user['accessToken'] === $token) {
               return new static($user); } } return null; } /** * Finds user by username * * @param string $username
      * @return static|null
      */
      public static function findByUsername($username) { foreach (self::$users as $user) { if (strcasecmp($user['username'], $username) === 0) { return new static($user);
            }
         }
         return null;
      }
      /**
      * @inheritdoc
      */
      public function getId() {
         return $this->id; } /** * @inheritdoc */ public function getAuthKey() { return $this->authKey;
      }
      /**
      * @inheritdoc
      */
      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) { return $this->password === $password;
      }
   }
?>

Step 1 - URL'ye gidin http://localhost:8080/index.php?r=site/login ve bir oturum açma ve parola için admin kullanarak web sitesinde oturum açın.

Step 2 - Ardından, adında yeni bir işlev ekleyin actionAuth() SiteController'a.

public function actionAuth(){
   // the current user identity. Null if the user is not authenticated.
   $identity = Yii::$app->user->identity; var_dump($identity);
   // the ID of the current user. Null if the user not authenticated.
   $id = Yii::$app->user->id;
   var_dump($id); // whether the current user is a guest (not authenticated) $isGuest = Yii::$app->user->isGuest; var_dump($isGuest);
}

Step 3 - Adresi yazın http://localhost:8080/index.php?r=site/auth web tarayıcısında, hakkında detaylı bilgileri göreceksiniz. admin kullanıcı.

Step 4 - Oturum açmak ve oturum açmak için aşağıdaki kodu kullanabilirsiniz.

public function actionAuth() {
   // whether the current user is a guest (not authenticated)
   var_dump(Yii::$app->user->isGuest); // find a user identity with the specified username. // note that you may want to check the password if needed $identity = User::findByUsername("admin");
   // logs in the user
   Yii::$app->user->login($identity);
   // whether the current user is a guest (not authenticated)
   var_dump(Yii::$app->user->isGuest); Yii::$app->user->logout();
   // whether the current user is a guest (not authenticated)
   var_dump(Yii::$app->user->isGuest);
}

İlk önce, bir kullanıcının oturum açıp açmadığını kontrol ederiz. Değer dönerse false, sonra bir kullanıcı aracılığıyla oturum açıyoruz Yii::$app → user → login() arayın ve onu kullanarak oturumu kapatın Yii::$app → user → logout() yöntem.

Step 5 - URL'ye gidin http://localhost:8080/index.php?r=site/auth, aşağıdakileri göreceksiniz.

yii\web\User sınıf aşağıdaki olayları yükseltir -

  • EVENT_BEFORE_LOGIN- yii \ web \ User :: login () başlangıcında oluşturulur

  • EVENT_AFTER_LOGIN - Başarılı bir girişten sonra yükseltildi

  • EVENT_BEFORE_LOGOUT- yii \ web \ User :: logout () başlangıcında oluşturulur

  • EVENT_AFTER_LOGOUT - Başarılı bir çıkıştan sonra yükseltildi