デフォルトのログイン プロセスでは、ユーザー名ではなく電子メールが必要です。
これをAppController.php
onに追加しました。これはCakePHP の Docs AuthenticationbeforeFilter()
にも記載されています。
$this->Auth->fields = array(
'username' => 'username',
'password' => 'password'
);
しかし、どういうわけか、ユーザーは自分のユーザー名でログインできません。どうすればそれを変更できるかについてのアイデアはありますか?
AppController
App::uses('Controller', 'Controller');
class AppController extends Controller {
var $components = array(
'Session',
'RequestHandler',
'Security'
);
var $helpers = array('Form', 'Html', 'Session', 'Js');
public function beforeFilter() {
$this->Auth->authorize = 'Controller';
$this->Auth->fields = array('username' => 'username', 'password' => 'password');
$this->Auth->loginAction = array('plugin' => 'users', 'controller' => 'users', 'action' => 'login', 'admin' => false);
$this->Auth->loginRedirect = '/';
$this->Auth->logoutRedirect = '/';
$this->Auth->authError = __('Sorry, but you need to login to access this location.', true);
$this->Auth->loginError = __('Invalid e-mail / password combination. Please try again', true);
$this->Auth->autoRedirect = true;
$this->Auth->userModel = 'User';
$this->Auth->userScope = array('User.active' => 1);
if ($this->Auth->user()) {
$this->set('userData', $this->Auth->user());
$this->set('isAuthorized', ($this->Auth->user('id') != ''));
}
}
/View/Users/login.ctp
login.ctp
これは、プラグインのフォルダーにあるデフォルトと同じです。フィールドのメールをユーザー名に変更しました。
さて、ここで興味深いことがあります。このファイルに記述したコードに関係なく、CakePHP はプラグインのログイン ビューからコンテンツを取得します。作成したビューは無視されます。
デバッグ
デバッガーを呼び出す場合:
Debugger::dump($this->Auth);
設定したすべての値が表示されます。しかし、それはまだユーザー名を受け入れません。メールでログインできるので、間違った資格情報を挿入しているわけではありません。ユーザー名/パスワードではなく、電子メール/パスワードを待っているだけです。