yii使用户在注册结束时自动登录(注册后自动认证)

时间:2014-03-23 20:36:30

标签: php class authentication yii model

在yii中有登录操作,需要

$model=new LoginForm; 

存储所有登录功能的地方。 与$model->login()一样,它会进行所有身份验证程序。

现在,当您进行注册时,您将使用不同的模型

    $model=new User;

因为你必须使用用户数据库来存储新用户。

那么如何在单一过程中将LoginForm合并到$ model中以使用它的功能呢? 因为我希望通过注册过程的用户自动登录。例如,我需要$model->login()代码存储在LoginForm

更新

就像在Login动作中的I'vesaid一样,有一个字符串 if($ model-> validate()&& $ model-> login())

所以使用提供Jonny的链接我已经从这个

更新了一些我的代码
    if($model->validate())
    {
    if($model->save())

看起来像这样

if($model->validate())
            {
                $identity=new LoginForm($model->username,$model->password);
                $identity->login();
            if($model->save())

所以现在理论上我正在制作新的对象标识,将用户名和密码传递给它,并调用登录功能。必须与登录操作中的相同。 但这位新出生的用户仍然没有登录。

这里是完整登录操作代码

public function actionLogin()
    {
        $model=new LoginForm;

        // if it is ajax validation request
        if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }

        // collect user input data
        if(isset($_POST['LoginForm']))
        {
            $model->attributes=$_POST['LoginForm'];
            // validate user input and redirect to the previous page if valid
            if($model->validate() && $model->login())
                $this->redirect(Yii::app()->user->returnUrl);
        }
        // display the login form
        $this->render('login',array('model'=>$model));
    }

还发布LoginForm中保存的Login函数代码

public function login()
    {
        if($this->_identity===null)
        {
            $this->_identity=new UserIdentity($this->username,$this->password);
            $this->_identity->authenticate();
        }
        if($this->_identity->errorCode===UserIdentity::ERROR_NONE)
        {
            $duration=$this->rememberMe ? 3600*24*30 : 0; // 30 days
            Yii::app()->user->login($this->_identity,$duration);
            return true;
        }
        else
            return false;
    } 

1 个答案:

答案 0 :(得分:1)

感谢Jonny,各位大家阅读了他在评论中提供的链接,这是解决方案。

        $identity=new LoginForm();
        $identity->username=$model->username;
        $identity->password=$model->password;
        if($model->save()) {
            $identity->login();

只像我一样手动发送到身份用户名和模型,而不是像那个链接那样,并且主要事情是在登录登录功能之前在数据库中注册用户导致登录功能调用另一个人来检查你的数据库中这个新用户。