Custom userIdentity class in yii2

南楼画角 提交于 2019-12-25 04:43:34

问题


I want to create custom userIdentity class according to my specific requirements .Here the code is

<?php
namespace app\models;
use yii\web\IdentityInterface;
use app\models\dbTables\Users;

class UserIdentity implements IdentityInterface{

   const ERROR_USERNAME_INVALID=3;
   const ERROR_PASSWORD_INVALID=4;
   const ERROR_NONE=0;
   public $errorCode;

   private  $_id;
   private  $_email;
   private  $_role;
   private  $_name;

   public  function findIdentityById($id){
       $objUserMdl      = new Users;
       $user            = $objUserMdl::findOne($id);
       $userRole        = $objUserMdl->getUserRole($user->user_id);
       $this->_id       = $user->user_id;
       $this->_email    = $user->email_address;
       $this->_role     = $userRole;
       $this->_name     = $user->full_name;
       return $this;
    }

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

    public function getName(){
       return $this->_name;
    }

    public function getEmail(){
       return $this->_email;
    }

    public function getRole(){
       return $this->_role;
    }

    public static function findIdentity($id)
    {
      return self::findIdentityById($id);
    }

    public function getAuthKey()
    {
       throw new NotSupportedException('"getAuthKey" is not implemented.');
    }

    public function validateAuthKey($authKey)
    {
        throw new NotSupportedException('"validateAuthKey" is not implemented.');
    }

    public static function findIdentityByAccessToken($token, $type = null)
    {
        throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
    }



}

?>

Basically I have two tables roles and users and I want to set the specific properties from both table in yii::$app->user->identity

When I call the above code the findIdentity($id) function returns error for obvious reasons stating that I cannt call $this in static funtion . How can I set the required properties in function and return the instance of userIdentity class from it ?


回答1:


I recommend reading this: When to use self over $this? you are really confusing the 2.

   $objUserMdl      = new Users;
   $user            = $objUserMdl::findOne($id);
   $userRole        = $objUserMdl->getUserRole($user->user_id);

You are calling :: on an object, you cannot do that.

I say delete what you have done and start again, it should be much easier then what you wrote. It would take a long time to show you how to do it properly, just look in the yii2 advance template and see how they are doing it. You can use your own identity class and set up any special attributes there. Just study the yii2 code.



来源:https://stackoverflow.com/questions/27836662/custom-useridentity-class-in-yii2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!