Authentication Yii2注册而不保存会话数据

Authentication Yii2注册而不保存会话数据,authentication,yii2,authorization,yii2-advanced-app,Authentication,Yii2,Authorization,Yii2 Advanced App,我的Yii2高级申请表中有注册表格。在我的应用程序中,只有管理员可以注册用户。但当我注册新用户时,管理会话数据被销毁,新用户的会话数据被设置。我尝试的是在注册新用户时不更改会话数据。管理员用户仍然是,应设置为会话数据。如何解决这个问题。这是我在控制器中的操作: public function actionSignup() { $model = new SignupForm(); if(Yii::$app->user->can('admin'))

我的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;

        }
    }
签出
\yii\web\User::login()
。当通过调用
Yii::$app->getUser()->login($user)
在代码中运行时,会话数据将设置为与
$user
匹配


如果总是管理员用户在注册新用户,我甚至不确定您是否需要运行登录方法。

我已经解决了这个问题。为了使答案清晰简单,我将向您展示site controller(Yii2高级模板)中的默认注册操作:

我唯一做的就是添加这个

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

在if语句中

请用代码更新您的问题。您如何注册此用户?向我们展示控制器中的操作以及正在使用的用户模型的任何方法。在“我的操作”中,一切正常。我的意思是数据将被添加到数据库中,用户将在创建新用户时注册。但是,例如,我想添加名为Johnny的用户。操作将被执行,然后在我的网站登录的用户将约翰尼不是管理员。但我试图实现添加JohnnyIf后管理员仍应被记录如果您决定将enalbeSession设置为
false
,则无需在该if内执行该操作(这只会使该语句永远不会发生)。顺便看一下。看看你的代码,你只需要删除任何登录尝试,正如@spencer4of6所说。
Yii::$app->user->enableSession = false