首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >注册后Yii2自动登录

注册后Yii2自动登录
EN

Stack Overflow用户
提问于 2017-07-18 02:07:48
回答 3查看 1.4K关注 0票数 0

我正在创建一个使用yii2框架的网站。我在注册方面有问题。我在家里有一种模式,里面有报名表格。现在,当我试图注册,是的,它保存了成功,但它只停留在模式。现在我想是注册后,它会自动登录。

这是我注册的form_

代码语言:javascript
复制
<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>

这是我的模型:

代码语言:javascript
复制
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;
}
}

这是我的控制器:

代码语言:javascript
复制
  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,
    ]);
}

我没有任何想法,我认为我的代码是正确的,但我不知道为什么不起作用。

更新

  • 当我点击按钮,注册,它只停留在模式,当我再次点击它,按钮,验证是有效的。这意味着它保存到数据库,但不自动登录。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-18 04:43:53

您应该获得登录的用户标识。

代码语言:javascript
复制
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,
    ]);
}

有关更多http://www.yiiframework.com/doc-2.0/guide-security-authentication.html,请参见此

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

票数 0
EN

Stack Overflow用户

发布于 2017-07-18 06:33:15

我已经使用了下面的代码和它为我工作。它也是YII2 .Controller操作代码的标准代码:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2022-06-20 10:30:11

经过几分钟的一步一步的调试-它运行良好。

代码语言:javascript
复制
//Signup
public function actionSignup()
{
    $model = new SignupForm();

    if ($model->load(Yii::$app->request->post()) && $model->signup()) { /*Save 
to DB first*/
        $genmail = $model->email; //get model email value 
        $identity = User::findOne(['email' => $genmail]); //find user by email
        if (Yii::$app->user->login($identity)) { // login user
            return $this->redirect('account'); // show accaount page
        }
    }
    return $this->render('signup', [
        'model' => $model,
    ]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45156336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档