我有一个正在运行的网站运行良好,我正在对代码进行一些更改,所以我将它复制到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的值之后,它没有显示任何值。
有人可以建议我缺少什么吗?
答案 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);