1

申し訳ありませんが、質問するのは嫌いですが、これを解決して調査するのに何時間も費やしましたが、運がありませんでした.

CakePHP (最新バージョンを実行) は、フィールド設定の使用を拒否しているようです (データベースのメール列をユーザー名として使用できるようにするため)。データベースから使用したいフィールドである「電子メール」に設定すると、誤った詳細を示すログインが拒否されます。何らかの理由で、DebugKit で SQL からの出力を取得できません。以下のようにユーザー名に設定されている場合は、DB の「一時」列を使用するだけで正常に動作します。コンポーネント変数に入れてみましたが、それでもうまくいきませんでした。私は何が間違っているのでしょうか?デバッグがオンになっています。ログまたはブラウザにエラーが表示されません。

モデルには電子メール列が含まれています。

コントローラ/AppController.php

class AppController extends Controller {

        public $components = array(
                'Session',
                'DebugKit.Toolbar',
                'Auth' => array(
                        'allow' => array('login','logout'),
                        'loginAction' => array('controller' => 'users', 'action' => 'login'),
                        'loginRedirect' => array('controller' => 'dashboard', 'action' => 'index'),
                        'authorize' => 'Controller'
                )
        );

        function beforeFilter() {
                Security::setHash('md5');
                $this->Auth->authenticate = array(
                        'Form' => array(
                                'fields' => array(
                                        'username' => 'username',
                                ),
                        ),
                );
        }
}

コントローラ/UserController.php

class UsersController extends AppController {

        public $uses = array('User');

        public function beforeFilter() {
                parent::beforeFilter();
        }

        public function isAuthorized($user){
                return true;
        }

        public function login() {
                $this->layout = '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','flash_error');
                        }
                }
        }

        public function logout() {
                $this->layout = 'login';

                $this->Session->setFlash('Successfully logged out!','flash_success');
                $this->redirect($this->Auth->logout());
        }

}

View/Users/login.ctp

<?php
        $this->set('title_for_layout', 'Login');

        echo $this->Session->flash();
        echo $this->Session->flash('auth','flash_info');

        echo $this->Form->create('User', array(
                'action' => 'login'
        ));
        echo $this->Form->input('username',array(
                'between' => '<br/>',
                'before' => '<p>',
                'after' => '</p>',
                'class' => 'text',
                'label' => 'Email:'
        ));
        echo $this->Form->input('password',array(
                'between' => '<br/>',
                'before' => '<p>',
                'after' => '</p>',
                'class' => 'text',
                'label' => 'Password:'
        ));
        echo $this->Form->submit('Login', array(
                'class' => 'submit',
                'before' => '<p>',
                'after' => '</p>'
        ));
        echo $this->Form->end();
?>
4

2 に答える 2

1

フォームのフィールドの名前をユーザー名からメールに変更する必要があります。ラベルを「メール」に設定するだけでは不十分です。

        echo $this->Form->input('email',array(
            'between' => '<br/>',
            'before' => '<p>',
            'after' => '</p>',
            'class' => 'text',
            'label' => 'Email:'
于 2013-04-22T03:03:04.483 に答える
0

appController のコンポーネント コードを更新して、次のように認証値を Auth 配列に追加してみてください。

public $components = array(
            'Session',
            'DebugKit.Toolbar',
            'Auth' => array(
                    'allow' => array('login','logout'),
                    'loginAction' => array('controller' => 'users', 'action' => 'login'),
                    'loginRedirect' => array('controller' => 'dashboard', 'action' => 'index'),
                    'authorize' => 'Controller',
                    'authenticate' => array(
                        'Form' => array(
                                'fields' => array('username' => 'email')
                            )
                    )
            )
    );
于 2013-04-21T16:15:01.450 に答える