在Yii应用程序中获取用户ID的问题

时间:2014-11-24 10:28:31

标签: php yii

我有一个正在运行的网站运行良好,我正在对代码进行一些更改,所以我将它复制到localhost。该站点具有用户管理系统,需要登录。用户登录后,会将其重定向到mysite.com/admin/index。

正在进行用户验证,并在UserIdentity类中将类返回错误代码验证为0.但是,当用户转到WebUser类时,当我检查$ this-> id时,它返回一个空值。此外,Yi :: app() - > user-> id不存在。

以下是我的代码的相关部分:

在main.php中

'components'=>array(
        'user'=>array(
            // enable cookie-based authentication
            // 'allowAutoLogin'=>true,
            'class' => 'WebUser',
            'loginUrl'=>array('site/login'),
        ),
        // uncomment the following to enable URLs in path-format
        'urlManager'=>array(
            'urlFormat'=>'path',
            'showScriptName'=>false,
            'rules'=>array(
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),

在UserIdentity.php中

private $_group;
private $_id;

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

public function authenticate($seeker = false, $queryid = false){
  //Retrieve seeker Login

  $record=User::model()->findByAttributes(array('login_name'=>$this->username, 'status' => 0));

  //Invalid username
  if($record===null){
    $this->errorCode=self::ERROR_USERNAME_INVALID;
  }
  //Invalid password
  else if($record->password !== $record->encryptPassword($this->password) && $record->password !== $record->encryptPassword($this->password, true)){
    $this->errorCode=self::ERROR_PASSWORD_INVALID;
  }
  //Valid login
  else{
    //Use new encryption
    if($record->password === $record->encryptPassword($this->password, true))
      $record->resetPassword($this->password);
    $this->_id       = $record->id;
    $this->_group    = $record->group;
    $this->errorCode = self::ERROR_NONE;
  }
  if($this->errorCode == self::ERROR_NONE){
    $auth=Yii::app()->authManager;
    try{ $role=$auth->createRole($this->_group); } catch(Exception $e){}

    if(!$auth->isAssigned($this->_group,$this->_id)){
      if($auth->assign($this->_group,$this->_id)){
        Yii::app()->authManager->save();
      }
    }
  }

  return !$this->errorCode;
}

在我的SiteController.php中,当我在登录后检查userid时,它返回正确的值,但在用户被重定向到admin / index并且我检查userid的值之后,它没有显示任何值。

有人可以建议我缺少什么吗?

2 个答案:

答案 0 :(得分:1)

以下代码保存网址状态,
请求admin/edit/3 - &gt;重定向到login page - &gt;重定向到admin/edit/3
请求login page - &gt;重定向admin/index

$this->redirect(Yii::app()->getUser()->getReturnUrl('admin/index'));

答案 1 :(得分:0)

如果仅从您的代码中决定而没有其他问题,则看起来像验证

Yii::app()->user->returnUrl == '/index.php'

总是假的。您可以通过在调试器中停止此品脱的代码,或者只是简单地添加“dump&#39; n&#39; stop code”来调试它:)

var_dump(
    Yii::app()->user->returnUrl == '/index.php',
    Yii::app()->user->returnUrl
);
die();

在此行之前

$this->redirect(Yii::app()->user->returnUrl == '/index.php'? '/admin/index': Yii::app()->user->returnUrl);