1

私はキャプチャにそのコードを使用しています:https ://github.com/solutudo/cakephp-captcha

user_controller.phpこれがログインアクションの私のコードです:

    public function login() {
        if (!empty($this->data)
            && !empty($this->Auth->data['User']['username'])
            && !empty($this->Auth->data['User']['password'])) {
            // captcha code
            if ($this->RequestHandler->isPost()) {
                $this->User->setCaptcha($this->Captcha->getCode());
                $this->User->set($this->data);
                if ($this->User->validates()) {
                    // captcha code 
                    $user = $this->User->find('first', array(
                        'conditions' => array(
                            'User.email' => $this->Auth->data['User']['username'],
                            'User.password' => $this->Auth->data['User']['password']),
                        'recursive' => -1
                        ));
                    if (!empty($user) && $this->Auth->login($user)) {
                        if ($this->Auth->autoRedirect) {            
                            $this->redirect($this->Auth->redirect());
                        }
                    } else {
                        $this->Session->setFlash($this->Auth->loginError, $this->Auth->flashElement, array(), 'auth');
                    }
                }
            }
        }
    }

user.ctpを表示する

    <?php
    echo $this->Form->create(array('action'=>'login'));
    echo $this->Form->input('username');
    echo $this->Form->input('password');
    // captcha code
    echo $this->Html->image('captcha.jpg', array('style' => 'padding: 0.5%;'));
    echo $this->Form->input('captcha');
    // captcha code
    echo $this->Form->end('Login');
    ?>

モデルUser.php

    <?php
    class User extends AppModel {
        public $actsAs = array(
            'Captcha' => array(
                'field' => 'captcha',
                'error' => 'Captcha code entered invalid'
            )
        );
    }
    ?>

キャプチャコードの検証とキャプチャが機能していません。キャプチャを入力せずにログインできます。同じコントローラーのadd関数で同じコードを使用しましたがuser_controller.php、そのときはキャプチャコードが機能していました。

正しいキャプチャを入力した後、ユーザーにログインしてもらいたい。

4

1 に答える 1

0

コードを読むと、検証を試みる前にキャプチャを生成する必要があるようです。キャプチャを生成しているコードのどこにもありません。おそらく、生成関数 (ドキュメントのように) を指すルートがあるかもしれませんが、/img/captcha.jpgここではわかりません。CaptchaComponent::generate()また、セッションでキャプチャを実際に保存する場所もわかりません。

routes.php以下がファイルに含まれていることを確認してください。

Router::connect('/img/captcha.jpg', array('action' => 'captcha'));

そして、AppController.phpファイルに次の関数を配置します。

// auto-outputs an image
public function captcha()  {
    $this->autoRender = false;
    $this->Captcha->generate();
}

基本的に、イメージが作成されると、実際にこの関数にルーティングされ、コードが作成されてセッションに保存されます。ユーザーが送信を押すと、ログイン機能が検証を試みます。無効な場合、ビューがレンダリングされ、新しいキャプチャが代わりに使用されます。

于 2012-10-08T15:26:09.143 に答える