如何在Yii中创建具有两个用户级别的登录模块

时间:2014-08-18 03:12:01

标签: php mysql yii login

我想创建一个包含2个不同用户级别的登录页面,Doctor&家长。我怎么能在Yii中做到....

下面列出了两个表....对于这两个用户,电子邮件地址是用户名。

CREATE TABLE Doctor(   doctor_email VARCHAR(50),   password VARCHAR(50),   doctor_name VARCHAR(50),   doctor_phone INT(10),   speciality VARCHAR(200),   主要关键(doctor_email) );

CREATE TABLE Parent(   parent_email VARCHAR(50),   parent_name VARCHAR(50),   password VARCHAR(20),   parent_address VARCHAR(100),   parent_phone INT(10),   主要关键(parent_email) );

这是UserIdentity.php中的authenticate()函数

public function authenticate(){

    $record1 = Doctor::model()->findByAttributes(array('doctor_email' => $this->username));
    $record2 = Parents::model()->findByAttributes(array('parent_email' => $this->username));

    if ($record1 !== NULL) {
        if ($record1->password == $this->password) {
            $this->errorCode = self::ERROR_NONE;

        } else {
            $this->errorCode = self::ERROR_PASSWORD_INVALID;
        }
    } else if ($record2 !== NULL) {
        if ($record2->password == $this->password) {
            $this->errorCode = self::ERROR_NONE;

        } else {
            $this->errorCode = self::ERROR_PASSWORD_INVALID;
        }
    }
    return !$this->errorCode;
}

这是models / LoginForm.php中的login()函数

public function login(){

    if ($this->_identity === null) {
        $this->_identity = new UserIdentity($this->username, $this->password);

        $this->_identity->authenticate();
        if ($this->_identity->record1 !== NULL)
            $this->isDoc = TRUE;
        else if ($this->_identity->record2 !== NULL)
            $this->isDoc = FALSE;
    }
    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;
}

这是siteContoller.php中的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'];


        if ($model->validate() && $model->login()) {


            if ($model->isDoc) {
                $this->redirect(array('/doctor/index'));

            } elseif ($model->isDoc == FALSE) {
                $this->redirect(array('/parents/index'));

            }
        }
    }
    // display the login form
    $this->render('login', array('model' => $model));
}

当两个用户登录时,它会重定向到'/ parents / index'。谁能告诉我我做错了什么?或任何想法..... Thanx提前..

1 个答案:

答案 0 :(得分:1)

我可以看到问题是$model->isDoc是空的。正如您使用$model->isDoc == FALSE

一样

我的意思是双等运算符。所以这种情况正在成真。

尝试使用$model->isDoc === FALSE(三等运算符)

我很确定它会再次将您带到登录表单。

如果我上面没有错,那么真正的问题仍然存在

if ($this->_identity->record1 !== NULL)
            $this->isDoc = TRUE;
        else if ($this->_identity->record2 !== NULL)
            $this->isDoc = FALSE;

尝试var_dump($this->_identity->record1)以及var_dump($this->_identity->record2)并检查其中任何一个是否在任何情况下都不为空

或者你可以试试这个

在您的UserIdentity类中,您需要将两个变量s声明为

class UserIdentity extends CUserIdentity
{
public $record1;
public $record2;

}

现在位于身份验证()

$record1更改为$this->record1,将$record2更改为$this->record2