0

CakePHP のログイン アクションに and if/else を追加しようとしています。ログイン アクションには多数の行があり、LoginValidate の後に if/else を追加すると、ログイン アクションの括弧が正しく閉じません。

セッションは書き込まれますが、崇高なテキスト 2 でブラケット ハイライターを使用すると、一番上のブラケットがハイライトされません。これがコードです。私がやろうとしているのは、KCFinder のセッション変数を、ユーザーが UserGroup の「Admin」にない場合は「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;
        }

私のセッション セクションを追加した結果、一番上の 2 つのブラケットが適切に強調表示されません (これも崇高な 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'));
        }
    }
}

質問のコードには追加のロジックがいくつかありますが、認証ログイン機能が行うことを複製するコードのチャンクもあります。

CakePHP を使用する

CakePHP を使用している場合は、CakePHP を使用してください。この行:

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

以下と同等です。

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

繰り返しになりますが、一貫性があると、コードが読みやすくなり、最終的には保守が容易になります。

于 2013-01-11T23:31:38.350 に答える