Я использую API отдыха. В производстве все звонки работают. В среде разработки он каждый раз завершается с 401. Есть пользовательский провайдер API и он проверяет, есть ли у пользователя доступ к API. Логин - http_basic с учетными данными пользователя.
Я попробовал несколько вещей, чтобы выяснить, в чем проблема. Но ничего не работает.
Я сделал отладочный вывод в UserApiProvider, но меня не будут вызывать.
security.yaml
providers:
user_provider:
id: dashboard.user_provider.email
api_provider:
id: dashboard.user_provider.api
internal_provider:
id: dashboard.user_provider.internal
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
internal_status:
pattern: ^/internal/status$
stateless: true
http_basic:
provider: internal_provider
api:
pattern: ^/api/
stateless: true
http_basic:
provider: api_provider
main:
pattern: ^/
form_login:
provider: user_provider
failure_handler: security.login_failure_handler
success_handler: security.login_success_handler
csrf_provider: security.csrf.token_manager
logout:
csrf_provider: security.csrf.token_manager
success_handler: security.custom_logout_success_handler
anonymous: true
switch_user: true
ApiUserProvider
class ApiUserProvider extends UserProvider
{
/**
* {@inheritDoc}
*/
protected function findUser($username)
{
/** @var User $user */
$user = $this->userManager->findUserByEmail($username);
if ($user && !$user->hasApiAccess()) {
return null;
}
return $user;
}
}
Ошибка будет:
{"error": {"code": 401, "message": "Unauthorized","исключение": [{"сообщение": "Вы не прошли проверку подлинности", "класс": "Symfony \ Component \ HttpKernel \ Exception \ HttpException", "trace": [{"namespace": "", "short_class":"", "класс": "", "типа": "", "функция": "", "файл": "/ приборная панель / Библиотека / продавец / friendsofsymfony / остальное-расслоение / FOS / RestBundle / EventListener / AccessDeniedListener. PHP " "линии": 77, "арг": []}, { "пространства имен": "ФОС \ RestBundle \ EventListener", "short_class": "AccessDeniedListener", "класс":" ФОС \ RestBundle \ EventListener \ AccessDeniedListener», "тип": "->", "функция": "", "файл onKernelException": "/ панель / Библиотека / поставщика / Symfony / Symfony / SRC / Symfony / Компонент / EventDispatcher / Debug / WrappedListener.php","линия": 61, "арг": [[ "объект", "Symfony \ Component \ HttpKernel \ Event \ GetResponseForExceptionEvent"], ["string", "kernel.exception"], ["object", "Symfony \ Component \ HttpKernel \ Debug \ TraceableEventDispatcher"]]}
...
Из dev.log
[request ERROR] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\HttpException: "You are not authenticated" at /dashboard/lib/vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/EventListener/AccessDeniedListener.php line 77 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\HttpException(code: 0): You are not authenticated at /dashboard/lib/vendor/friendsofsymfony/rest-bundle/FOS/RestBundle/EventListener/AccessDeniedListener.php:77, Symfony\\Component\\Security\\Core\\Exception\\AuthenticationCredentialsNotFoundException(code: 0): A Token was not found in the TokenStorage. at /dashboard/lib/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php:51)"}
У кого-нибудь есть идеи?
С уважением, Кай