1

現在、cakephp ログインをユーザー名フィールドの使用からメール フィールドの使用に変更しようとしています。

ユーザー名フィールドを使用すると、ログインは正常に機能します。ユーザー名を使用したログインのコードは次のとおりです。

ログイン.ctp

<?php
echo $this->Form->create('User');
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->end(__('Login'));
?>

ユーザーコントローラー.php

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('add', 'login'); // Letting users register themselves
    $this->Auth->fields = array('username' => 'username', 'password' => 'password');
}
public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->Session->setFlash(__('worked'));
        } else {
            debug($this->data);
            $this->Session->setFlash(__('Invalid username or password, try again'));
        }
    }
}

AppController

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

したがって、これはすべて正常に機能し、テストの詳細でログインできます。

したがって、これを電子メールを使用するように変更するには、次のことを行います。

  • login.ctp の入力をユーザー名からメールに変更します

    echo $this->Form->input('email');
    
  • userscontroller の fields 配列を username から email に変更します

    $this->Auth->fields = array('username' => 'email', 'password' => 'password');
    
  • データベース フィールドをユーザー名から電子メールに変更します

次に、同じテストの詳細を使用してログインしようとすると、それらが間違っていることがわかります。

なぜこれがうまくいかないのか、誰にも分かりますか?

4

1 に答える 1

6

Cake 2.xでは、少し異なります

$this->Auth->authenticate = array(
    'Form' => array(
        'fields' => array('username' => 'email', 'password' => 'password'),
    ),
);
于 2012-05-28T22:56:13.990 に答える