0

我正在尝试将 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 中的突出显示插件)

感谢您的评论和输入。

4

1 回答 1

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']) {

一些奖励评论

这是很多代码

这个登录函数非常大(它引用了更多代码,没有显示)。它可能会简单得多。例如从书中(一定要比较你正在使用的蛋糕版本的书):

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 -使用CakePHP。这一行:

$_SESSION['KCFINDER']['disabled']=false; //config from ckfinder

相当于:

$this->Session->write('KCFINDER.disabled', false);

同样,保持一致使代码更易于阅读,最终更易于维护。

于 2013-01-11T23:31:38.350 回答