3.1+で発生した別の問題を解決したため、最終的にアプリをcakephp 3.2にアップグレードしました。
簡単に言えば、私はXety CookieAuthを使用して、ユーザーが私の Web サイトに戻ってきたときに自動ログインできるようにしています。すべてが Cake 3.0 で問題なく動作しました。
3.2 では、「ページが見つかりません」というエラーが発生し、ログ ファイルで確認できます。
2016-01-31 12:49:42 Error: [Cake\Network\Exception\InvalidCsrfTokenException] Missing CSRF token cookie
私は何を間違っていますか?他にアップグレードが必要かどうかを確認しようとしましたが、ドキュメントを確認しましたが、すべて正しいようです...
編集:これを AppController から削除すると、すべてが機能しているように見えることに気付きました。しかし、その後、自動ログイン機能が失われます...
if (!$this->Auth->user() && $this->Cookie->read('CookieAuth')) {
$this->request->data = $this->Cookie->read('CookieAuth');
$user = $this->Auth->identify();
$this->loadModel('Users');
if ($user) {
$this->Auth->setUser($user);
/* Check which browser version is in use */
$userData = $this->Users->find('all')->where(['id' => $user['id']])->first();
$userData->browser = $this->Browser->getData();
$this->Users->save($userData);
/* Check if the user has the contract_accepted flag set to true */
if ($userData->contract_accepted != true) {
$this->request->session()->write("checkContract", true);
}
} else {
$this->Cookie->delete('CookieAuth');
}
}
編集
数回試行した後、ndm が正しい方向を示してくれたおかげで、元の問題 (醜いハックによって修正したもの) が、CookieAuth が Cookie からのデータを正しく適用していないことがわかりました。CookieAuthenticate.php にいくつかのデバッグを追加したところ、次のことがわかりました。
debug($this->_config['fields']);
/vendor/xety/cake3-cookieauth/src/Auth/CookieAuthenticate.php (line 46)
[
'username' => 'username',
'password' => 'password'
]
debug($cookies);
/vendor/xety/cake3-cookieauth/src/Auth/CookieAuthenticate.php (line 47)
[
'email' => 'info@mydomain.com',
'password' => 'mypassword'
]
では、ユーザー名ではなく電子メールを使用していることをプラグインに伝えるにはどうすればよいでしょうか?
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => ['username' => 'email']
],
'Xety/Cake3CookieAuth.Cookie'
],
'loginRedirect' => '/',
'logoutRedirect' => '/',
]);