我正在尝试添加和if / else到CakePHP中的登录操作。登录操作有很多行,当我在LoginValidate之后添加我的if / else时,登录操作的括号现在不能正常关闭。
会话确实已经写好了,但是当在sublime text2中使用支架荧光笔时,最上面的括号不会突出显示。这是代码。我要做的是,如果用户不在UserGroup'Admin'中,则将KCFinder的会话变量写为'true',如果用户在UserGroup'Admin'中,则为false。
public function login() {
print_r($this -> Session -> read());
if ($this->request -> isPost()) {
$this->User->set($this->data);
if($this->User->LoginValidate()) {
$email = $this->data['User']['email'];
$password = $this->data['User']['password'];
$user = $this->User->findByUsername($email);
$UserGroup = $this->User->UserGroup;
if (empty($user)) {
$user = $this->User->findByEmail($email);
if (empty($user)) {
$this->Session->setFlash(__('Incorrect Email/Username or Password'));
return;
}
}
//write session value for kcfinder
if ($user['UserGroup']['name']='Admin') {
$this -> Session -> write("kcfinder", "false");
$_SESSION['KCFINDER']['disabled']=false; //config from ckfinder
} else {
$this -> Session -> write("kcfinder", "true");
return;
}
// check for inactive account
if ($user['User']['id'] != 1 and $user['User']['active']==0) {
$this->Session->setFlash(__('Sorry your account is not active, please contact to Administrator'));
return;
}
// check for verified account
if ($user['User']['id'] != 1 and $user['User']['email_verified']==0) {
$this->Session->setFlash(__('Your registration has not been confirmed please verify your email or contact to Administrator'));
return;
}
if(empty($user['User']['salt'])) {
$hashed = md5($password);
} else {
$hashed = $this->UserAuth->makePassword($password, $user['User']['salt']);
}
if ($user['User']['password'] === $hashed) {
if(empty($user['User']['salt'])) {
$salt=$this->UserAuth->makeSalt();
$user['User']['salt']=$salt;
$user['User']['password']=$this->UserAuth->makePassword($password, $salt);
$this->User->save($user,false);
}
$this->UserAuth->login($user);
$remember = (!empty($this->data['User']['remember']));
if ($remember) {
$this->UserAuth->persist('2 weeks');
}
$OriginAfterLogin=$this->Session->read('Usermgmt.OriginAfterLogin');
$this->Session->delete('Usermgmt.OriginAfterLogin');
$redirect = (!empty($OriginAfterLogin)) ? $OriginAfterLogin : LOGIN_REDIRECT_URL;
$this->redirect($redirect);
} else {
$this->Session->setFlash(__('Incorrect Email/Username or Password'));
return;
}
}
}
}
其他要点:
1)此代码来自以下用户管理插件:http://usermgmt.ektasoftwares.com
2)我添加的部分是:
//write session value for kcfinder
if ($user['UserGroup']['name']='Admin') {
$this -> Session -> write("kcfinder", "false");
$_SESSION['KCFINDER']['disabled']=false; //config from ckfinder
} else {
$this -> Session -> write("kcfinder", "true");
return;
}
添加会话部分的结果是两个最顶部的括号没有正确突出显示(再次使用sublime text2中的突出显示插件)
感谢您的评论和意见。
答案 0 :(得分:1)
这是一项作业 - 而不是比较:
if ($user['UserGroup']['name']='Admin') {
即。在此之后,$user['UserGroup']['name']
的值设置为true,代码将始终输入此if块。这可能是意图:
if ($user['UserGroup']['name'] === 'Admin') {
使用一致的空格更容易发现这样的错误(问题中的代码变化很大)。你也可以使用这种风格来避免它们:
if ('Admin' === $user['UserGroup']['name']) {
哪个“有效”,因为如果你犯了同样的错误,你会得到一个解析错误而不是一个赋值:
if ('Admin' = $user['UserGroup']['name']) {
此登录功能非常大(并且它引用了更多代码,未显示)。它可能会简单得多。例如来自the book(请务必与您正在使用的蛋糕版本的书进行比较):
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}
}
问题中的代码中还有一些额外的逻辑 - 但是也有一些代码重复了Auth登录功能所做的事情。
如果你正在使用CakePHP - 使用 CakePHP。这一行:
$_SESSION['KCFINDER']['disabled']=false; //config from ckfinder
相当于:
$this->Session->write('KCFINDER.disabled', false);
再次保持一致,使代码更易于阅读并最终更易于维护。