2016-03-23 15 views
0

私のYii2の高度なアプリケーションに登録フォームがあります。私のアプリケーションでは、管理者だけがユーザーを登録できます。しかし、新規ユーザーを登録すると、管理セッションのデータが破棄され、新しいユーザーのセッションデータが設定されます。私がしようとしているのは、新しいユーザーを登録するときにセッションデータを変更しないことです。管理ユーザーはセッションデータに設定する必要があります。この問題を解決する方法。セッションデータを保存せずにYii2サインアップ

public function actionSignup() 
{ 
     $model = new SignupForm(); 

     if(Yii::$app->user->can('admin')) 
     { 
      if (($response = self::ajaxValidate($model)) !== false) 
       return $response; 

      if (self::postValidate($model)) 
      {     
       try 
       { 
        $trans = Yii::$app->db->beginTransaction(); 

        if ($user = $model->signup()) { 
         Yii::$app->getUser()->login($user); 
        }     

        //tagidan tushgan odamining child_left, child_right tini o'zgartirish 
        $under = UserModel::findOne($user->id_parent_under); 

        if ($under->id_child_left == 0) 
         $under->id_child_left = $user->id; 
        else 
         $under->id_child_right = $user->id; 

        $under->update(false); 

        ChildrenBinaryModel::insertNewUser($user); 
        ChildrenClassicModel::insertNewUser($user); 

        $parents = ChildrenBinaryModel::find()->with('user')->where(["id_child" => $user->id])->orderBy(['depth' => SORT_ASC])->all(); 

        $c_user = $user; 
        foreach($parents as $p) 
        { 
         $p_user = $p->user; 

         if ($p_user->id_child_left == $c_user->id) 
          $p_user->ball_left += 100; 
         else 
          $p_user->ball_right += 100; 

         $p_user->update(false); 

         $c_user = $p_user; 
        } 

        $trans->commit(); 
       } 
       catch(\Exception $e) 
       { 
        $trans->rollBack(); 
        return $this->renderContent($e->getMessage()); 
       } 

       return $this->render('index'); 
      } 

      return $this->render('signup', [ 
       'model' => $model, 
      ]); 
     }else{ 
      throw new ForbiddenHttpException; 

     } 
    } 
+0

あなたの質問にあなたのコードを更新してください。このユーザーをどのように登録していますか?コントローラ内のアクションと、使用されているユーザモデルのメソッドを表示します。 – Clyff

+0

私の行動はすべて正常に動作します。私はデータがデータベースに追加され、新しいユーザーを作成するときにユーザーがサインアップされることを意味します。しかし、たとえば、Johnnyという名前のユーザーを追加したいとします。アクションが実行され、私のサイトにログインしているユーザーは管理者ではないJohnnyになります。しかし、私はジョニーを追加した後でも管理者がまだログに記録されるようにしようとしています – Sherzod

答えて

0

私はこの問題を解決しました。答えは明確でシンプルに行うために、私はあなたがサイトコントローラ(Yii2高度なテンプレート)でサインアップアクションをデフォルト表示されます:

public function actionSignup() 
    { 
     $model = new SignupForm(); 
     if ($model->load(Yii::$app->request->post())) { 
      if ($user = $model->signup()) { 
       if (Yii::$app->user->enableSession = false && 
        Yii::$app->getUser()->login($user)) { 
        return $this->goHome(); 
       } 
      } 
     } 

     return $this->render('signup', [ 
      'model' => $model, 
     ]); 
    } 

は、私だけが行っているif文の内側にこの

Yii::$app->user->enableSession = false 

を追加して

+0

enalbeSessionを 'false'に設定すると、その中で行う必要はありません。ところで、http://stackoverflow.com/questions/2063480/the-3-different-equalsをご覧ください。あなたのコードを見て、あなたは@ spencer4of6が言ったように、ログイン試行を削除するだけでした。 – Clyff

0

アウト\yii\web\User::login()ためdocumentation:これは、コントローラで自分の行動です。 Yii::$app->getUser()->login($user)を呼び出してこれをコード内で実行すると、セッションデータは$userに一致するように設定されます。

常に新しいユーザーにサインアップしている管理ユーザーの場合は、ログイン方法を実行する必要がないかどうかはわかりません。

関連する問題