主要问题是用户无法记住该选项而无法登录该网站。我已经修改了登录功能来检查用户访问权限并重定向到他们的特定操作,但它不起作用,用户在登录时不选择记住我的选项。这是我的登录操作代码..
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
if($model->validate() && $model->login()){
$user_id = Yii::app()->user->id;
$record=Users::model()->findByPk($user_id);
if($record->masrole->name == 'Admin'){
$this->redirect(array('//users/admin'));}
if($record->masrole->name == 'Merchant'){ $this->redirect(array('//users/Description','user'=>$record->username));
}
}
}
这是我的配置文件。
'components'=>array(
'user'=>array(
'class' => 'WebUser',
'allowAutoLogin'=>true,
'autoRenewCookie' => true,
'identityCookie' => array('domain' => '.xxxxx.com'),
'loginUrl'=>'http://xxxxx.com/login',
),
'session' => array(
'class' => 'CDbHttpSession',
'cookieParams' => array('domain' => '.xxxxxx.com'),
'timeout' => 3600,
'connectionID' => 'db',
'sessionName' => 'session',
),
这是我的模特登录功能
public function login()
{
if($this->_identity===null)
{
$this->_identity=new UserIdentity($this->email,$this->password);
$this->_identity->authenticate();
}
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
return true;
}
else{
return false;
}
}
这是WebUser.php
class WebUser extends CWebUser {
private $_model;
function isAdmin(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user->mas_role_id) == 1;
}
function isMerchant(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user->mas_role_id) == 2;
}
}
// Load user model.
protected function loadUser($id=null)
{
if($this->_model===null)
{
if($id!==null)
$this->_model=Users::model()->findByPk($id);
}
return $this->_model;
}
}
最后这是用户身份
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$ctiteria = new CDbCriteria;
$ctiteria->condition = "email = '".$this->username."' OR username = '".$this->username."'";
$record=Users::model()->find($ctiteria);
if($record===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if ($record->status != 1)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if($record->password !== md5($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id = $record->id;
$this->setState('title', $record->email);
$this->errorCode=self::ERROR_NONE;
}
return !$this->errorCode;
}
public function getId()
{
return $this->_id;
}
}
function isAdmin(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user->mas_role_id) == 1;
}
function isMerchant(){
$user = $this->loadUser(Yii::app()->user->id);
return intval($user->mas_role_id) == 2;
}
protected function loadUser($id=null)
{
if($this->_model===null)
{
if($id!==null)
$this->_model=Users::model()->findByPk($id);
}
return $this->_model;
}
}
答案 0 :(得分:1)
这一行很重要
if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
{
$duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
Yii::app()->user->login($this->_identity,$duration);
return true;
}
确保执行进入此块...尝试使用var_dump()来调试错误代码
http://www.yiiframework.com/doc/guide/1.1/en/topics.auth#handling-authorization-result
第5章
如果浏览器被重定向到登录页面并且登录成功,我们可能希望将浏览器重定向回导致授权失败的页面。我们如何知道该页面的URL?我们可以从用户组件的returnUrl属性中获取此信息。因此,我们可以执行以下操作来执行重定向:
Yii::app()->request->redirect(Yii::app()->user->returnUrl);
答案 1 :(得分:0)
如果有人遇到同样的问题,请回复。 您可能只是在config / main.php
中的会话名称中有空格删除名称中的空格并设置'cookieMode'=> 'allow'或'cookieMode'=> '只要'。 然后清除你的cookie,它应该工作而不记得我。