2013-04-20 95 views
0

主要問題是用戶無法記住該選項而無法登錄網站。我已修改登錄功能,以檢查用戶訪問並重定向到他們的特定操作,但它不起作用id用戶在登錄時不選擇記住我選項。這裏是我的登錄操作代碼。用戶無法在yii中設置記住我選項而無法登錄?

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

顯示WebUser.php和UserIdentity.php – Hemc 2013-04-20 11:39:40

+0

的代碼@Hemc添加代碼... – 2013-04-20 12:03:23

回答

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章

如果瀏覽器被重定向到登錄頁面,登錄成功後,我們可能需要將瀏覽器重定向回導致授權失敗的頁面。我們如何知道該網頁的網址?我們可以從用戶組件的returnUrl屬性中獲取這些信息。因此,我們可以做如下執行重定向:

Yii::app()->request->redirect(Yii::app()->user->returnUrl);

+0

這個code.have檢查 – 2013-04-20 12:20:03

+0

後續代碼var_dump($持續時間)給出此警告的執行進入。 'session_regenerate_id():無法重新生成會話ID - 已經發送的頭文件' – 2013-04-20 12:23:46

+0

@SudhanshuSaxena然後呢? '$ record-> masrole-> name'是否正確比較了名稱並重定向了用戶?是的,var_dump會生成輸出和錯誤「已發送」,但這不是重點,請使用'die;'停止腳本並調試 – 2013-04-20 12:23:54

0

只是回覆,如果有人有同樣的問題呢。 這可能只是你的會話名稱在config/main.php中有空格

刪除名稱空間並設置'cookieMode'=>'allow'或'cookieMode'=>'only'。 然後清除你的cookies,它應該在沒有記住我的情況下工作。