如何从控制器调用yii组件useridentity类

时间:2014-03-17 17:10:59

标签: php yii yii-components

我正在尝试使用Yii创建一个简单的登录。这是我的auth控制器

class AuthController  extends Controller
{
    /**
    * Declare class-based actions.
    */
    public function actionLogin()
    {
        $model = new LoginForm;
        $post = Yii::app()->request->getPost('LoginForm');
        // If form is submitted
        if($post) {
            $identity = new UserIdentity($post['username'], $post['password']);
            echo $identity->testing();
            if($identity->authenticate()) {
                echo 'yes';
            } else {
                echo 'no';
            }
            exit;
        }
        $this->render('login', array('model' => $model));   
    }
}

这是我的UserIdentity

class UserIdentity extends CUserIdentity
{


    private $_id;

    public function authenticate()
    {   echo 'testing';
        $user = LoginForm::model()->findByAttributes(array('username' => $this->username));
        if(is_null($user)) {
            %this->errorCode=self::ERROR_USERNAME_INVALID;
        } else if($user->password != $this->password) {
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        } else {
            $this->_id = $user->id;
            $this->errorCode=self::ERROR_NONE;
        }

        return !$this->errorCode;
    }

    function getId()
    {
        return $this->_id;
    }
}

我已经提到了回答'是'和回声“不”#39;但两者都没有显示。如何纠正

1 个答案:

答案 0 :(得分:0)

首先,你甚至不会看到那些回声声明,唯一可以让最终用户在Yii中看到的东西是" views"。对于我的登录代码,与您的登录代码略有不同,在确认身份验证后,我的应用程序将重定向到主页。您的自定义UserIdentity文件看起来很好,但同样,甚至不会看到该echo语句。此UserIdentity文件仅用于在幕后执行自定义用户身份验证。

在我的UserController中(与你的AuthController相对),我的actionLogin是:

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);
        }
    }
    $this->render('/user/login',array('model'=>$model));
}

例如,根据上述内容,您可以重定向到您所在的上一页或重定向到主站点视图" / site / index"根据您是否已登录,根据具有某些任意功能或打印HTML的代码。一个过于简单的站点视图示例:

<?php
/* @var $this SiteController */
if (Yii::app()->user->isGuest)
{
    // Do stuff here if user is guest.
    echo 'User is a guest.';
}
else
{
    // Do stuff here if user is authenticated.
    echo 'User is authenticated.';
}
?>