0

エラーが発生しています:

クラス 'App\Entity\User' はチェーン構成された名前空間で見つかりませんでした

API プラットフォームで Symfony 4.2 を実行しています。API トークン/キー認証セットアップを作成する必要があり、ガード認証システムを使用しています。

実在物:

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ORM\Table(name="arc_sync_api_keys")
 */
class User implements UserInterface
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue
     */
    public $id;

    /** @ORM\Column(length=20) */
    public $username;

    /** @ORM\Column(name="api_token", length=40) */
    public $apiKey;

    /** @ORM\Column(length=30) */
    public $roles = [];

    public function getUsername(): string
    {
        return $this->username;
    }

    public function getRoles(): array
    {
        return array('ROLE_USER');
    }

    public function getPassword()
    {
    }
    public function getSalt()
    {
    }
    public function eraseCredentials()
    {
    }
}

オーセンティケータ:

namespace App\Security;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Guard\AbstractGuardAuthenticator;

class ApiKeyAuthenticator extends AbstractGuardAuthenticator
{
    ...

    public function getUser($credentials, UserProviderInterface $userProvider)
    {
        $apiKey = $credentials['token'];

        if (null === $apiKey) {
            return;
        }



        // if a User object, checkCredentials() is called
        return $userProvider->loadUserByUsername($apiKey);
    }

    ...
}

セキュリティ.yaml

security:
    providers:
        # used to reload user from session & other features (e.g. switch_user)
        app_user_provider:
            entity:
                class: App\Entity\User
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: ~
            logout: ~

            guard:
                authenticators:
                    - App\Security\ApiKeyAuthenticator

ここでエラーが発生します:

$userProvider->loadUserByUsername($apiKey) を返します。

それをたどった後、ドライバーのロードに失敗しましたが、この問題を修正する方法がわかりません。ありがとう!

4

1 に答える 1

0

マルチエンティティマネージャーを使用しているときに同じ問題が発生しました。AuthenticationServiceException App\Entity\User' のような例外がチェーンに見つかりませんでした..

この例外は本番環境のみにありました。

default_entity_managerを追加して解決しました:

# config/packages/prod/doctrine.yaml
doctrine:
    orm:
        default_entity_manager: 'your default entity manager name'

# ...
于 2019-08-24T09:37:35.993 に答える