MariaDBで「utf8b4_unidoce_520_ci」が使いたくて、10.2.14 に勇んでアップデートをした。
その後暫くしてEC-CUBEの管理画面にログインしようとしたら・・・・(汗)ログインできない。
どうやってもログインできない!再インストールも嫌なので何とかしたい。
と言う訳で認証のコードを探したら、ありました。認証そのものはsymfony の「UserAuthenticationProvider.php」 の authenticate から呼び出しています。
以下の様にコメントアウトして、適当なパスワードでログインできます。ログイン後パスワードの変更をしてお終い!
※最後にコメントアウトを外すのを忘れない様に(自己責任において!)。
インストールディレクトリー\vendor\symfony\security\Core\Authentication\Provider\UserAuthenticationProvider.php public function authenticate(TokenInterface $token) { if (!$this->supports($token)) { return; } $username = $token->getUsername(); if ('' === $username || null === $username) { $username = 'NONE_PROVIDED'; } try { $user = $this->retrieveUser($username, $token); } catch (UsernameNotFoundException $e) { if ($this->hideUserNotFoundExceptions) { throw new BadCredentialsException('Bad credentials.', 0, $e); } $e->setUsername($username); throw $e; } if (!$user instanceof UserInterface) { throw new AuthenticationServiceException('retrieveUser() must return a UserInterface.'); } try { $this->userChecker->checkPreAuth($user); $this->checkAuthentication($user, $token); <= この行をコメントアウトする $this->userChecker->checkPostAuth($user); } catch (BadCredentialsException $e) { if ($this->hideUserNotFoundExceptions) { throw new BadCredentialsException('Bad credentials.', 0, $e); } throw $e; } $authenticatedToken = new UsernamePasswordToken($user, $token->getCredentials(), $this->providerKey, $this->getRoles($user, $token)); $authenticatedToken->setAttributes($token->getAttributes()); return $authenticatedToken; }
UserAuthenticationProviderはDaoAuthenticationProviderから呼び出されていて、$this->checkAuthenticationは DaoAuthenticationProviderのcheckAuthenticationを呼び出しています。ここで認証に失敗するとbadCredentialsExceptionが戻されるので、上記部位をコメントアウトすることで認証がスキップされます。