在CakePHP登录操作中写入会话if/else中断

在CakePHP登录操作中写入会话if/else中断,php,session,cakephp,Php,Session,Cakephp,我试图在CakePHP中向登录操作添加和if/else。登录操作有许多行,当我在LoginValidate之后添加if/else时,登录操作的括号现在无法正确关闭 会话确实会被写入,但是当在sublime text2中使用括号荧光灯时,最上面的括号不会高亮显示。这是密码。我试图做的是,如果用户不在用户组“Admin”中,则将KCFinder的会话变量写入“true”,如果用户在用户组“Admin”中,则写入“false” public function login() { print_r

我试图在CakePHP中向登录操作添加和if/else。登录操作有许多行,当我在LoginValidate之后添加if/else时,登录操作的括号现在无法正确关闭

会话确实会被写入,但是当在sublime text2中使用括号荧光灯时,最上面的括号不会高亮显示。这是密码。我试图做的是,如果用户不在用户组“Admin”中,则将KCFinder的会话变量写入“true”,如果用户在用户组“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) 此代码来自以下用户管理插件:

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;
        }
添加my session部分的结果是,最上面的两个括号没有正确高亮显示(再次使用sublime text2中的高亮显示插件)

感谢您的评论和输入。

检查您的比较 这是一项作业,不是比较:

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']) {
一些额外的评论 这是很多代码 这个登录函数相当大(它引用了更多代码,但没有显示)。它可以简单得多。例如,来自(确保与您正在使用的蛋糕版本的书进行比较):

问题中的代码中还有一些额外的逻辑位,但也有一些代码块重复了Auth login函数的功能

使用CakePHP 如果您使用的是CakePHP,请使用CakePHP。这一行:

$_SESSION['KCFINDER']['disabled']=false; //config from ckfinder
相当于:

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

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

您至少应该发布无法使用的版本。如果你甚至不告诉我们你做错了什么,我们应该如何找出你做错了什么?我认为你的登录方法应该有大约4行代码(不是1000行)。这里肯定有一些严重重构的空间。你真的在使用Auth组件吗?因为您正在编写由该组件为您处理的内容。比如角色、会话、约束,比如“active==1”。顺便说一句,你写了一次“=”而不是“=”。Auth component link:感谢您的反馈,我在使用的用户管理插件上添加了两点,我添加的部分似乎打破了最上面的两个括号。当我在会话上打印r时,用户组会被打印出来,这就是我使用它的原因。谢谢。我将运算符改为比较运算符。在测试了所编写的会话之后,它是正确的。然而,我仍然有一个问题,这个动作的两个最上面的括号没有突出显示,我不明白为什么。感谢您的耐心。如果您的编辑器没有正确地突出显示代码,我不会怀疑您所指的“最上面的两个括号”,可能有很多原因-请尝试格式化代码=)我之所以提到它,是因为我担心某些东西可能无法按预期工作。此外,如果/否则会导致支架断裂,这也是没有意义的。我会采纳你的建议,花更多的时间在谷歌上,以便更好地理解/回答我的问题。再次感谢Hanks AD7six,非常感谢您的评论。我没有写登录代码,它来自一个插件,但我知道它很长。我会考虑我的方法。干杯
$this->Session->write('KCFINDER.disabled', false);