cakephp4 にて認証時、認証しているユーザーを複数にする方法を教えてください。
cakephp4にて、認証した時、複数のユーザを認証できるようにしたいです。
複数のユーザーでログインした際、認証が最初にログインしたユーザー1人しか認識されないです。
認証するユーザを複数にし、ログアウトする際もユーザー事に個別でログアウトしたいです。
何か参考になるもの、アドバイス等を教えてもらえますか。
コントローラ側にて
UsersController
1public function login() 2 { 3 $this->Authorization->skipAuthorization(); 4 5 $this->request->allowMethod(['get', 'post']); 6 $result = $this->Authentication->getResult(); 7 // regardless of POST or GET, redirect if user is logged in 8 if ($result->isValid()) { 9 // redirect to /articles after login success 10 $redirect = $this->request->getQuery('redirect', [ 11 'controller' => 'Articles', 12 'action' => 'index', 13 ]); 14 15 return $this->redirect($redirect); 16 } 17 // display error if user submitted and authentication failed 18 if ($this->request->is('post') && !$result->isValid()) { 19 $this->Flash->error(__('Invalid username or password')); 20 } 21 } 22 23 public function logout() 24 { 25 $this->Authorization->skipAuthorization(); 26 27 $result = $this->Authentication->getResult(); 28 // regardless of POST or GET, redirect if user is logged in 29 if ($result->isValid()) { 30 $this->Authentication->logout(); 31 return $this->redirect(['controller' => 'Users', 'action' => 'login']); 32 } 33 return $this->redirect(['controller' => 'Users', 'action' => 'login']); 34 }
Application.php にて
Application
1 2public function getAuthenticationService(ServerRequestInterface $request): AuthenticationServiceInterface 3 { 4 $authenticationService = new AuthenticationService([ 5 'unauthenticatedRedirect' => '/users/login', 6 'queryParam' => 'redirect', 7 ]); 8 9 $service = new AuthenticationService(); 10 11 // Define where users should be redirected to when they are not authenticated 12 $service->setConfig([ 13 'unauthenticatedRedirect' => '/users/login', 14 'queryParam' => 'redirect', 15 ]); 16 17 18 // identifiers を読み込み、email と password のフィールドを確認します 19 //テスト 20 $fields = [ 21 IdentifierInterface::CREDENTIAL_USERNAME => 'email', 22 IdentifierInterface::CREDENTIAL_PASSWORD => 'password' 23 ]; 24 25 $service->loadAuthenticator('Authentication.Session'); 26 $service->loadAuthenticator('Authentication.Form', [ 27 'fields' => $fields, 28 'loginUrl' => '/users/login' 29 ]); 30 31 $service->loadIdentifier('Authentication.Password', compact('fields')); 32 33 return $service; 34}
試したこと
$result = $this->Authentication->getResult();
$user = $result->getData();
で認証が最初の1人しかされていないことを確認。
ログイン認証等は下記のCookbook cmsチュートリアルの通り作成しています。
https://book.cakephp.org/4/en/tutorials-and-examples.html
補足情報(FW/ツールのバージョンなど)
cakephp4.1.2
php7.2.32
認証は authentication
承認は authorization を使用しています。
(cakephp4から AuthComponent が非推奨となった為、
AuthComponentを使用しないようにしています。)
回答1件
あなたの回答
tips
プレビュー