自定义 UserProvider 配置 symfony 4
Custom UserProvider config symfony 4
我想创建自己的 LdapUserProvider 以应用关于用户名的不同角色。
准确地说,我的 LDAP 与来自 symfony 的默认 LdapUserProvider 一起工作得非常好。
正如 LDAP doc 所说:
ldap 用户提供程序,使用 LdapUserProvider class。与所有其他用户提供程序一样,它可以与任何身份验证提供程序一起使用。
请问如何使用自定义用户提供程序?
security:
providers:
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: o=xxx
search_dn: cn=xxx Downloader,ou=ApplicationUsers,o=xxx
search_password: 'xxx'
default_roles: [ROLE_USER]
uid_key: uid
filter: "{uid_key}={username}"
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
# provider: App\Services\MyLdapUserProvider
logout:
csrf_token_id: logout
path: /logout
target: /login
form_login_ldap:
csrf_parameter: _csrf_token
login_path: login
check_path: login
service: Symfony\Component\Ldap\Ldap
dn_string: 'o=xxx'
query_string: 'uid={username}'
target_path_parameter: home
default_target_path: /home
access_control:
- { path: /index, role: IS_AUTHENTICATED_FULLY }
- { path: ^/admin, roles: ROLE_ADMIN }
编辑:
谢谢你的回答@Vyctorya
我想这就是我需要的!
在 security.yaml 中,我是这样调用服务的:
security:
providers:
myLdap:
id: App\Services\MyLdapUserProvider
这是我的 service.yaml:
services:
App\Services\MyLdapUserProvider:
arguments:
$ldap: '@Symfony\Component\Ldap\LdapInterface'
$baseDn: 'o=xxx'
$searchDn: 'cn=xxx Downloader,ou=ApplicationUsers,o=xxx'
$searchPassword: 'xxx'
$defaultRoles:
'ROLE_USER'
$uidKey: 'uid'
$filter: '{uid_key}={username}'
Symfony\Component\Ldap\LdapInterface:
arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
arguments:
- host: ....
我不明白为什么没有定义 baseDn...
无法自动装配服务 "App\Services\MyLdapUserProvider":方法 "Symfony\Component\Security\Core\User\LdapUserProvider::__construct()" 的参数“$baseDn”是类型提示 "string",您应该明确配置它的值。
您需要调整配置:
security:
providers:
enter_you_custom_name_here:
id: AppBundle\Security\User\UserProvider
并创建 UserProvider
。扩展 Symfony\Component\Security\Core\User\LdapUserProvider
并覆盖 loadUserByUsername($username)
我想创建自己的 LdapUserProvider 以应用关于用户名的不同角色。 准确地说,我的 LDAP 与来自 symfony 的默认 LdapUserProvider 一起工作得非常好。
正如 LDAP doc 所说:
ldap 用户提供程序,使用 LdapUserProvider class。与所有其他用户提供程序一样,它可以与任何身份验证提供程序一起使用。
请问如何使用自定义用户提供程序?
security:
providers:
my_ldap:
ldap:
service: Symfony\Component\Ldap\Ldap
base_dn: o=xxx
search_dn: cn=xxx Downloader,ou=ApplicationUsers,o=xxx
search_password: 'xxx'
default_roles: [ROLE_USER]
uid_key: uid
filter: "{uid_key}={username}"
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
# provider: App\Services\MyLdapUserProvider
logout:
csrf_token_id: logout
path: /logout
target: /login
form_login_ldap:
csrf_parameter: _csrf_token
login_path: login
check_path: login
service: Symfony\Component\Ldap\Ldap
dn_string: 'o=xxx'
query_string: 'uid={username}'
target_path_parameter: home
default_target_path: /home
access_control:
- { path: /index, role: IS_AUTHENTICATED_FULLY }
- { path: ^/admin, roles: ROLE_ADMIN }
编辑: 谢谢你的回答@Vyctorya
我想这就是我需要的!
在 security.yaml 中,我是这样调用服务的:
security:
providers:
myLdap:
id: App\Services\MyLdapUserProvider
这是我的 service.yaml:
services:
App\Services\MyLdapUserProvider:
arguments:
$ldap: '@Symfony\Component\Ldap\LdapInterface'
$baseDn: 'o=xxx'
$searchDn: 'cn=xxx Downloader,ou=ApplicationUsers,o=xxx'
$searchPassword: 'xxx'
$defaultRoles:
'ROLE_USER'
$uidKey: 'uid'
$filter: '{uid_key}={username}'
Symfony\Component\Ldap\LdapInterface:
arguments: ['@Symfony\Component\Ldap\Adapter\ExtLdap\Adapter']
Symfony\Component\Ldap\Adapter\ExtLdap\Adapter:
arguments:
- host: ....
我不明白为什么没有定义 baseDn...
无法自动装配服务 "App\Services\MyLdapUserProvider":方法 "Symfony\Component\Security\Core\User\LdapUserProvider::__construct()" 的参数“$baseDn”是类型提示 "string",您应该明确配置它的值。
您需要调整配置:
security:
providers:
enter_you_custom_name_here:
id: AppBundle\Security\User\UserProvider
并创建 UserProvider
。扩展 Symfony\Component\Security\Core\User\LdapUserProvider
并覆盖 loadUserByUsername($username)