如何在yii中注册后登录用户


How to login a user after registration in yii

我不知道如何在使用yii框架创建用户后立即登录。

在UserController中,我创建了actionRegister以允许用户创建新帐户,这里如果用户成功保存到db,我也想为该用户执行登录。下面是我的代码:

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

事先感谢您在这件事上给我的帮助

好吧,看来我是在回答我自己的问题…

原来$this->redirect(array('view','id'=>$model->id));不允许登录发生一些模糊的原因…我不能回答这个问题,因为我昨天才开始学习yii,但如果有知识的人能证明这一点,我将不胜感激。

所以解决方案是删除重定向,我们得到一个用户在创建帐户后立即登录的用户

谢谢你试图帮助John和Jay =)

我通过向UserIdentity类添加一些代码来解决这个问题:

class UserIdentity extends CUserIdentity
{
    private $_id;
    //...
    public function setUpUser($user_id)
    {
        $this->_id=$user_id;
    }
}

因此,在CUserIdentity实例中设置id,您不需要对其进行身份验证。只做:

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

不删除$this->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);与第二个参数工作,感谢 lucifious

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