独り言


EC-CUBE3 の管理画面にログインできない!


MariaDBで「utf8b4_unidoce_520_ci」が使いたくて、10.2.14 に勇んでアップデートをした。
その後暫くしてEC-CUBEの管理画面にログインしようとしたら・・・・(汗)ログインできない。
どうやってもログインできない!再インストールも嫌なので何とかしたい。


  1. ユーザー認証を飛ばしてしまえ!

    と言う訳で認証のコードを探したら、ありました。認証そのものは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が戻されるので、上記部位をコメントアウトすることで認証がスキップされます。

    ページのトップへ

wordprass