メモ:CakePHP -Authコンポーネントで、使用するフィールド名を変えるとログインできない

私的なメモです。

Authコンポーネントで、$compornentsの設定で認証に使用するフィールド名を変更するとログインできなくなってしまったので、その原因について。

Authコンポーネントでログインできない問題はよくある間違いがいくつかあって、それについて解説されてるサイトはいっぱいあるので、まずはそちらを御覧ください。

今回発生した問題は、認証に使用するデフォルトのフィールド名「username」を「email」に変えるとログインできなくなった…というものです。

下記内容だとログインできるけど…

■モデル

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

■ビュー

<h2>Login</h2>
<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->input('username', array( 'label' => 'ユーザー名')); ?>
<?php echo $this->Form->input('password', array( 'label' => 'パスワード')); ?>
<?php echo $this->Form->end('Login'); ?>

 

usernameをemailに変えただけでログインできなくなります…

■モデル

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

■ビュー

<h2>Login</h2>
<?php echo $this->Form->create('User'); ?>
<?php echo $this->Form->input('email', array( 'label' => 'メールアドレス')); ?>
<?php echo $this->Form->input('password', array( 'label' => 'パスワード')); ?>
<?php echo $this->Form->end('Login'); ?>

認証に使用する値は、一意でなければならない

解決してみると単純な問題でした。

バリデーションでemailが一意な値かどうかチェックするようにしていたのですが、デバッグの為に一時的にこれをコメントアウトしていました。
そのため、重複したemailがデータベースに登録されてしまっていたのです。データベースを空にして、やり直すと問題なくログインできました。

単純だからこそなかなか気づかないんですね。こんな事に、数時間悩みもだえました…