Как войти в систему после регистрации в yii - PullRequest
4 голосов
/ 21 ноября 2011

Я не уверен, как я могу войти в систему сразу после создания, используя yii framework.

В UserController я создал actionRegister, чтобы позволить пользователю создать новую учетную запись. Здесь, если пользователь успешно сохранен в БД, я бы также хотел предварительно зарегистрировать логин для этого пользователя. Вот мой код:

    public function actionRegister()
    {
        $model=new User;

        if(isset($_POST['User']))
        {
            $model->attributes=$_POST['User'];

            if($model->save()){            

                $identity=new UserIdentity($model->email,$model->password);
                $identity->authenticate();
                Yii::app()->user->login($identity);

                $this->redirect(array('view','id'=>$model->id));                
            }
        }
        $this->render('register',array('model'=>$model));
    }

Заранее благодарю за любую помощь, которую вы можете оказать мне в этом вопросе.

Ответы [ 3 ]

3 голосов
/ 03 июля 2013

Я решил это, добавив код в класс UserIdentity:

class UserIdentity extends CUserIdentity
{
    private $_id;

    //...

    public function setUpUser($user_id)
    {
        $this->_id=$user_id;
    }
}

Итак, устанавливая идентификатор в экземпляре CUserIdentity, вам не нужно его аутентифицировать. Просто сделай:

$identity=new UserIdentity($model->email,'');
$identity->setUpUser($id); // id of user
Yii::app()->user->login($identity);

Вот и все.

3 голосов
/ 22 ноября 2011

Хорошо, похоже, я отвечаю на свой вопрос ...

Оказывается, что $this->redirect(array('view','id'=>$model->id)); не позволил войти в систему по какой-то непонятной причине ... Я не могу ответить на это, так как вчера я начал изучать yii, но был бы признателен, если бы кто-либо со знанием мог оправдать это. *

Таким образом, решение состоит в том, чтобы просто удалить перенаправление, и мы получили пользователя, вошедшего в систему сразу после создания учетной записи.

Спасибо за попытку помочь Джону и Джею =)

1 голос
/ 09 августа 2013

Вместо удаления $this->redirect(...); или использования второго параметра

redirect (..., $ terminate = true, ...)
$ terminate - завершить ли текущее приложение после вызова этого метода.По умолчанию true.

Вы также можете поставить $this->redirect(...); под оператором if, например:

if($model->save()) {
    $identity=new UserIdentity($email,$password);
    $identity->authenticate();
    if(Yii::app()->user->login($identity))
        $this->redirect(array('account/profile','id'=>$model->id));
}

Но, конечно, это не окончательное решение, вам может понадобиться elseа также в ваших индивидуальных случаях.

Также работает $this->redirect(..., false); со вторым параметром, также спасибо, lucifurious .

$this->redirect(array('account/profile','id'=>$model->id), false);
...