6

私の見解では:

<?php
echo $this->Form->create('User', array("controller" => "Users", "action" => "login", "method" => "post"));
echo $this->Form->input('User.email', array("label" => false));
echo $this->Form->input('User.password', array("label" => false, 'class' => 'password-input'));
echo $this->Form->end(); ?>

私のAppControllerで:

public $components = array(
        'Session',
        'Auth'
    );

    function beforeFilter(){
        $this->Auth->fields = array(
            'username' => 'email',
            'password' => 'password'
        );
    }

私のUsersControllerで:

function beforeFilter(){
        $this->Auth->allow('sign_up', 'login', 'logout', 'forgot_password');
        return parent::beforeFilter();
    }
public function login() {
        if ($this->Auth->login()) {
            $this->Session->setFlash(__('Successfully logged in'), 'default', array('class' => 'success'));
            $this->redirect($this->Auth->redirect());
        } else {
            if (!empty($this->request->data)) {
                $this->Session->setFlash(__('Username or password is incorrect'), 'default', array('class' => 'notice'));
            }
        }
    }

しかし、ログインが機能していません。何が欠けていますか?

ありがとう。

4

2 に答える 2

14

問題は次のとおりだと思います。

function beforeFilter(){
    $this->Auth->fields = array(
        'username' => 'email',
        'password' => 'password'
    );
}

これが、CakePHP 1.3 でのカスタム ログイン フィールドの指定方法でした。代わりに、CakePHP 2.0 では、これらのフィールドを で指定する必要がありますpublic $components = array(...);1.3 APIは、Auth に $fields プロパティがあることを示していますが、2.0 APIは、もはや $fields プロパティがないことを示しています。したがって、次のことを行う必要があります。

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        )
    )
);

詳細については、http: //book.cakephp.org/2.0/en/core-libraries/components/authentication.html#configuring-authentication-handlersをご覧ください。

うまくいく方法を教えてください!

于 2012-04-21T06:06:43.987 に答える
0

私の問題の最終的な解決策。ありがとうございました。

私は userModel に問題があり、これを書きます:

'Auth' => array(
         'userModel' => 'Member'
      )

これの代わりに:

'Auth' => array(
    'authenticate' => array(
        'Form' => array(
            'userModel' => 'Member'
        )
    )
)
于 2012-08-06T13:24:01.047 に答える