2017-07-18 17 views
0

私はyii2フレームワークを使用してウェブサイトを作成しています。私は登録に問題があります。私は自宅でモーダルを持っており、サインアップフォームが入っています。今私が登録しようとすると、はいそれは成功を保存しましたが、それはモーダルに留まります。今私はそれが自動的にログインする登録後です。Yii2登録後自動的にログインする

これは私のサインアップ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> 

これは私のモデルである:

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

これは私のコントローラです:

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

私は任意のアイデアを持っていません、私のコードは正しいと思いますが、なぜ動作していないのかわかりません。

は、私は、ボタンのサインアップをクリックしたとき、私は再び検証が動作しているボタンを、それをクリックしたときにのみ、モーダルに滞在し、

  • を更新しました。データベースに保存されますが、自動的にはログインしないことを意味します。
+0

デュードはわからないけど、単に「サインアップ」としてそれをすることによって試みを与える代わりに、フォーム –

+0

感謝の男で送信ボタンを、まだ動作していないでユーザー登録は同じ問題。 –

答えて

0

あなたは

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

ログイン

ためのユーザーIDを取得する必要があり、私はコードの下に使用していると、その私のために働いて、より http://www.yiiframework.com/doc-2.0/guide-security-authentication.html

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

+0

ありがとうございました。でも、私はまだ同じ問題が働いていません。 –

+0

働いていない場合、なぜ答えが受け入れられたとマークされています.. ..私に知らせてください – scaisEdge

0

のためにこれを参照してください。 YII2 .Controllerアクションコードのためのそのまた、標準コード:

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

ありがとう、しかし、動作しません。 –

+0

あなたのモデル関数 "サインアップ"コードを私に教えてください。完全なユーザーレコードを返さなければなりません。 –

関連する問題