我不知道如何在使用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);