2016-03-23 3 views
0

Ich habe ein Registrierungsformular in meiner erweiterten Yii2-Anwendung. In meiner Anwendung kann nur der Administrator Benutzer registrieren. Aber wenn ich einen neuen Benutzer registriere, werden die Admin-Sitzungsdaten zerstört und die Sitzungsdaten eines neuen Benutzers werden gesetzt. Was ich versuche ist, Sitzungsdaten nicht zu ändern, wenn ich einen neuen Benutzer registriere. Der Admin-Benutzer sollte weiterhin auf Sitzungsdaten eingestellt sein. Wie man dieses Problem löst. Dies ist meine Aktion in der Steuerung:Yii2-Anmeldung ohne Speichern der Sitzungsdaten

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

Bitte aktualisieren Sie Ihre Frage mit Ihrem Code. Wie registrierst du diese Benutzer? Zeigen Sie uns die Aktion in Ihrem Controller und alle Methoden Ihres verwendeten Benutzermodells. – Clyff

+0

In meiner Aktion funktioniert alles gut. Ich meine, Daten werden zur Datenbank hinzugefügt und der Benutzer wird angemeldet, wenn Sie einen neuen Benutzer erstellen. Aber zum Beispiel möchte ich einen Benutzer namens Johnny hinzufügen. Aktion wird ausgeführt und dann angemeldet Benutzer auf meiner Website wird Johnny nicht admin. Aber ich versuche zu erreichen, dass Admin noch nach dem Hinzufügen von Johnny protokolliert werden sollte. – Sherzod

Antwort

0

Ich habe dieses Problem gelöst.

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, 
     ]); 
    } 

Nur habe ich getan wurde das Hinzufügen dieser

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

innerhalb der if-Anweisung

: Um Antwort klar und einfach zu machen ich Ihnen die Registrierung Aktion in Site-Controller (Yii2 erweiterte Vorlage) zeigt die Standard
+0

Wenn Sie sich entscheiden, enalbeSession auf 'false' zu ​​setzen, gibt es keine Notwendigkeit, das innerhalb zu tun, wenn (dies wird nur diese Aussage nie vorkommen). Übrigens werfen Sie einen Blick auf http://stackoverflow.com/questions/2063480/the-3-different-equals. Und wenn Sie sich Ihren Code ansehen, müssen Sie nur den Login-Versuch entfernen, wie @spencer4of6 sagt. – Clyff

0

Kasse die documentation für \yii\web\User::login(). Wenn dies in Ihrem Code ausgeführt wird, indem Sie Yii::$app->getUser()->login($user) aufrufen, werden die Sitzungsdaten auf Ihre $user festgelegt.

Wenn immer der Benutzer admin neue Benutzer anmeldet, bin ich mir nicht sicher, ob Sie die Login-Methode überhaupt ausführen müssen.