Я установил fosOauthServerBundle с настраиваемым поставщиком аутентификации (избегая FosUserBundle).
Кажется, что конфигурация моего сервиса неточна, поэтому пакет не может найти провайдера пользователя:
Вызов функции-члена loadUserByUsername() для null
со ссылкой на :vendor\friendsofsymfony\oauth-server-bundle\Storage\OAuthStorage.php (строка 162)
try {
$user = $this->userProvider->loadUserByUsername($username);
} catch (AuthenticationException $e) {
return false;
}
Надеюсь, в сообщении уже обрабатываются ошибки такого рода, но оно не предлагает явного решения:
предыдущая тема, та же проблема
Я использую поставщика сущностей, как в документации, который отлично работает, используя все, кроме предоставления пароля с использованием fosoauth (разочаровывает): ссылка на провайдера пользователя
На самом деле я попробовал пару способов написать это в службе конфигурации, но не смог заставить его работать. Может ли кто-нибудь предложить мне решение?
Я пробовал app_user_provider.email или app_user_provider.username, но это тоже не работает.
security:
encoders:
App\Entity\User:
algorithm: bcrypt
#FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER, ROLE_ESTABLISHMENT
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
oauth_token:
pattern: ^/oauth/v2/token
security: false
# Add this firewall only in the Authorization code flow
oauth_authorize:
pattern: ^/oauth/v2/auth
form_login:
provider: app_user_provider
check_path: /oauth/v2/auth_login_check
login_path: /oauth/v2/auth_login
anonymous: true
api_doc:
pattern: ^/api/doc
fos_oauth: false
stateless: true
anonymous: true
api:
pattern: ^/api
fos_oauth: true
stateless: true
anonymous: false
main:
pattern: ^/
form_login:
provider: app_user_provider
csrf_token_generator: security.csrf.token_manager
#logout: true
guard:
authenticators:
- App\Security\LoginFormAuthenticator
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
path: /
always_remember_me: true
logout:
path: app_logout
target: app_login
fos_oauth: false
anonymous: true
access_control:
- { path: ^/oauth/v2/auth_login$, role: IS_AUTHENTICATED_ANONYMOUSLY } # Add this only in the Authorization code flow
- { path: ^/api/doc, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
- { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/establishment, role: IS_AUTHENTICATED_ANONYMOUSLY }
fos_oauth_server:
db_driver: orm
client_class: App\Entity\Client
access_token_class: App\Entity\AccessToken
refresh_token_class: App\Entity\RefreshToken
auth_code_class: App\Entity\AuthCode
service:
#user_provider: fos_user.user_provider.username
user_provider: app_user_provider
Это спасло бы мой день, спасибо!