0

主な問題は、ユーザーがオプションを記憶しないとサイトにログインできないことです。ユーザーアクセスをチェックして特定のアクションにリダイレクトするようにログイン機能を変更しましたが、ユーザーがログイン時に記憶オプションを選択しないと機能しません。ログインアクションのコードは次のとおりです..

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;
  }
}

そして最後にこれはユーザーIDです

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;
    }
}
4

2 に答える 2

0

誰かがまだ同じ問題を抱えている場合に返信するだけです。config/main.php のセッション名にスペースがあるだけかもしれません

名前からスペースを削除し、'cookieMode' => 'allow' または 'cookieMode' => 'only' に設定してください。次に、Cookie をクリアすると、私を覚えていなくても動作するはずです。

于 2013-06-06T08:39:34.793 に答える