2017-07-18 3 views
0

Je crée un site web en utilisant yii2 framework. J'ai un problème d'inscription. J'ai un modal à la maison et il contient le formulaire d'inscription. Maintenant, quand j'essaie de m'enregistrer, Oui, il a réussi mais il ne reste que modal. Maintenant, je veux, c'est après l'enregistrement, il se connectera automatiquement.Yii2 Se connecter automatiquement après l'inscription

Ceci est mon inscription Form_:

<div class="row"> 
    <div class="col-lg-12"> 
     <?php yii\widgets\Pjax::begin(['id' => 'sign-up']) ?> 
      <?php $form = ActiveForm::begin(['id' => 'form-signup', 'options' => ['data-pjax' => true]]); ?> 
       <div class="row"> 
       <div class="col-sm-6"> 
       <?= $form->field($model, 'role')->dropDownList(['2' => 'User', '1' => 'Encoder', '3' => 'Admin']) ?> 
       <?= $form->field($model, 'username')->textInput(['placeholder' => 'Username....']) ?> 
       <?= $form->field($model, 'email')->textInput(['placeholder' => 'Email....']) ?> 
       <?= $form->field($model, 'password')->passwordInput(['placeholder' => 'Password.....']) ?> 
       </div> 
       <div class="col-sm-6"> 
       <?= $form->field($model, 'confirmPassword')->passwordInput(['placeholder' => 'Confirm Password.....']) ?> 
       <?= $form->field($model, 'first_name')->textInput(['placeholder' => 'First Name....']) ?> 
       <?= $form->field($model, 'middle_name')->textInput(['placeholder' => 'Middle Name....']) ?> 
       <?= $form->field($model, 'last_name')->textInput(['placeholder' => 'Last Name....']) ?> 
       </div> 
       </div> 
       <center> 
       <?= $form->field($model, 'verifyCode')->widget(Captcha::className()) ?>    
       </center> 
       <div class="form-group"> 
        <?= Html::submitButton('Signup', ['class' => 'btn btn-primary', 'name' => 'signup-button', 'style' => 'width: 100%; padding: 10px;']) ?> 
       </div> 
      <?php ActiveForm::end(); ?> 
     <?php yii\widgets\Pjax::end() ?> 
    </div> 
</div> 

Ceci est mon modèle:

class SignupForm extends Model 
{ 
public $role; 
public $username; 
public $email; 
public $password; 
public $first_name; 
public $middle_name; 
public $last_name; 
public $confirmPassword; 
public $verifyCode; 

public function rules() 
{ 
    return [ 
     ['role', 'required'], 
     ['username', 'trim'], 
     ['username', 'required'], 
     ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'], 
     ['username', 'string', 'min' => 2, 'max' => 20], 
     ['email', 'trim'], 
     ['email', 'required'], 
     ['email', 'email'], 
     ['email', 'string', 'max' => 30], 
     ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'], 
     ['password', 'required'], 
     ['password', 'string', 'min' => 6], 
     ['first_name', 'trim'], 
     ['first_name', 'required'], 
     ['middle_name', 'trim'], 
     ['middle_name', 'required'], 
     ['last_name', 'trim'], 
     ['last_name', 'required'], 
     ['verifyCode', 'captcha'], 
     ['verifyCode', 'required'], 
     [['confirmPassword'], 'compare', 'compareAttribute' => 'password', 'message' => 'Passwords do not match.'], 

    ]; 
    } 

/** 
* Signs user up. 
* 
* @return User|null the saved model or null if saving fails 
*/ 
public function signup() 
{ 
    if (!$this->validate()) { 
     return null; 
    } 

    $user = new User(); 
    $user->username = $this->username; 
    $user->email = $this->email; 
    $user->setPassword($this->password); 
    $user->generateAuthKey(); 
    $user->role = $this->role; 
    $user->first_name = $this->first_name; 
    $user->middle_name = $this->middle_name; 
    $user->last_name = $this->last_name; 

    return $user->save() ? $user : null; 
} 
} 

Ceci est mon contrôleur:

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

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

Je n'ai aucune idée, Je pense que mes codes sont corrects mais je ne sais pas pourquoi ça ne marche pas.

MISE À JOUR

  • Lorsque je clique sur le bouton signup il reste que dans le modal et quand je clique à nouveau sur le bouton travaille les validations. Cela signifie qu'il enregistre dans la base de données mais pas automatiquement.
+0

Mec ne suis pas sûr, mais juste donner un essai en faisant comme « inscription » au lieu Inscrivez à le bouton d'envoi à la forme –

+0

mec merci, mais ne fonctionne pas encore la même problème. –

Répondre

0

vous devriez obtenir l'identité de l'utilisateur pour se connecter

public function actionSignup() 
{ 
    $model = new SignupForm(); 
    if ($model->load(Yii::$app->request->post())) { 

     if ($user = $model->signup()) { 
      $identity = User::findOne(['username' => $model->$username]); 
      if (Yii::$app->user->login($identity)) { 
       return $this->goHome(); 
      } 
     } 
    } 

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

voir cela pour plus http://www.yiiframework.com/doc-2.0/guide-security-authentication.html

http://www.yiiframework.com/doc-2.0/yii-web-user.html

+0

Merci l'homme, mais j'ai toujours eu le même problème ne fonctionne pas. –

+0

si ne fonctionne pas .. pourquoi la réponse est marquée comme acceptée .. .. laissez-moi savoir – scaisEdge

0

J'ai utilisé ci-dessous le code et son travail pour moi. Il est aussi un code standard pour YII2 .Commande Code d'action:

public function actionSignup() 
{ 
    $model = new SignupForm(); 
    if ($model->load(Yii::$app->request->post())) { 
     if ($user = $model->signup()) { 
      $model= \common\models\User::findOne([$user->id]); //you need to get complete model again and pass it to login function 
      if (Yii::$app->user->login($model) { 
       return $this->goHome(); 
      } 
     } 
    } 

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

Merci l'homme, mais son ne fonctionne pas. –

+0

Pouvez-vous me partager le code d'inscription de votre fonction de modèle. Vous devez retourner le dossier d'utilisateur complet. –