PDA

View Full Version : مشکل بالوگین



Tarragon
چهارشنبه 07 خرداد 1393, 11:40 صبح
با سلام
من میخوام یه فرم ورود واسه چند دسته آدم بزارم.
مثلا برای دانش آموز ، معلم و مدیریت مدرسه.(تو پروژه خودم هستش کارجو کارفرما و مدیریت)
تا جایی که تونستم نوشتم اماحالابه یه مشکل عجیب خوردم.
لوگین برای دسته اول که کارفرماباشه کار می کنه امابرای دسته های دیگه مثلا برای مدیریت سایت اگر یوزر نیم و پسورد اشتباه باشه می گه اشتباهه اما اگر صحیح باشه عملیات لوگین رو انجام نمی ده. در ضمن باdie چک کردم if ها کاملا صحیح کار می کنن.
حالا می خوام اشکال کارم رو بدونم.
با تشکر.
فایل userIdentity :


<?php
class UserIdentity extends CUserIdentity
{
private $_id = NULL;
public $accessLevel = NULL;
private $_type = NULL;

public function UserIdentity($username,$password,$type)
{
$this->_type = $type;
$this->username = $username;
$this->password = $password;
}
public function authenticate()
{
print_R($this);
if($this->_type == 1) {
$user = Employers::model()->find('CompanyEmail=:user and confirmed=1',array(':user'=>strip_tags($this->username)));
if(empty($user))
{
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
elseif($user->password != $this->password)
{
$this->errorCode=self::ERROR_PASSWORD_INVALID;
}
else
{
$this->_id = $user->id;
$this->username = $user->CompanyEmail;
$this->setState('userType', $this->_type);
$this->errorCode=self::ERROR_NONE;
}
}
elseif($this->_type==2) {
if($this->username != 'master'){
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
elseif($this->password != '123ooo'){
$this->errorCode=self::ERROR_PASSWORD_INVALID;
}
else
{
$this->setState('userType', 2);
$this->errorCode=self::ERROR_NONE;
}
}
else
$user = Users::model()->find('email=:user and confirmed=1',array(':user'=>strip_tags($this->username)));
if(empty($user))
{
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
elseif($user->password != $this->password)
{
$this->errorCode=self::ERROR_PASSWORD_INVALID;
}
else
{
$this->_id = $user->id;
$this->username = $user->email;
$this->errorCode=self::ERROR_NONE;
$this->setState('userType', $this->_type);
}
}
return !$this->errorCode;

}

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


}

MMSHFE
چهارشنبه 07 خرداد 1393, 13:26 عصر
تلفنی هم خدمتتون گفتم که قطعاً یک جای کار ایراد داره. برای else چرا آکولاد نگذاشتین؟ الان فقط اولین خط بعد از else وابسته به else هست و بقیه دستورات همیشه اجرا میشن و بخاطر همینه که کسی بجز کاربران جدول users نمیتونه لاگین کنه. بهرحال کد شما رو با switch بازنویسی کردم که فکر میکنم بهتر باشه:

<?php
class UserIdentity extends CUserIdentity
{
public $accessLevel = NULL;
private $_id = NULL;
private $_type = NULL;

public function __construct($username, $password, $type)
{
$this->_type = $type;
$this->username = $username;
$this->password = $password;
}

public function authenticate()
{
switch($this->_type) {
case 1:
$user = Employers::model()->find('CompanyEmail=:user AND confirmed=1', array(':user' => $this->username));
if($user === null)
{
$this->errorCode = self::ERROR_USERNAME_INVALID;
}
elseif($user->password != $this->password)
{
$this->errorCode = self::ERROR_PASSWORD_INVALID;
}
else
{
$this->_id = $user->id;
$this->username = $user->CompanyEmail;
$this->setState('userType', $this->_type);
$this->errorCode = self::ERROR_NONE;
}
break;
case 2:
if($this->username != 'master') {
$this->errorCode = self::ERROR_USERNAME_INVALID;
}
elseif($this->password != '123ooo') {
$this->errorCode = self::ERROR_PASSWORD_INVALID;
}
else
{
$this->setState('userType', 2);
$this->errorCode = self::ERROR_NONE;
}
break;
default:
$user = Users::model()->find('email=:user AND confirmed=1', array(':user' => $this->username));
if(empty($user))
{
$this->errorCode=self::ERROR_USERNAME_INVALID;
}
elseif($user->password != $this->password)
{
$this->errorCode = self::ERROR_PASSWORD_INVALID;
}
else
{
$this->_id = $user->id;
$this->username = $user->email;
$this->setState('userType', $this->_type);
$this->errorCode = self::ERROR_NONE;
}
break;
}
return !$this->errorCode;
}
public function getId()
{
return $this->_id;
}
}

Tarragon
چهارشنبه 07 خرداد 1393, 16:53 عصر
اینو زمان کپی اشتباه کردم خواستم درستش کنم دیگه یادم رفت اما این کد شما هم باز مشکلم رو داره !
team viewer بدم خدمتتون؟

MMSHFE
پنج شنبه 08 خرداد 1393, 07:45 صبح
بله تیم ویور بدین تو پیام خصوصی