我想创建一个包含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提前..
答案 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