我正在使用 IMAG/Ldap-Bundle (BorisMorel/LdapBundle) 对我的用户进行身份验证,并且我无法保留User
对我的 LDAP 服务器所做的任何更改。但是每当用户登录时,我需要在本地检查一些东西并根据一些规则添加用户的角色。
每当 imag 验证我的 LDAP 服务器上的用户/密码时,它都会调用我创建的正在侦听“绑定”事件的服务。事情是这样的:
ldap_user_verifier:
class: MyBundle\Service\LdapUserVerifierService
arguments: [ @security.context, @doctrine.orm.default_entity_manager, @twig ]
tags:
- { name: 'kernel.event_listener', event: imag_ldap.security.authentication.pre_bind, method: loadUser }
注意:bind_username_before
设置为false
,这意味着LdapUserVerifierService::loadUser
只有在用户登录并且User
类加载到我的security.context
.
然后我有我LdapUserVerifierService::loadUser
这样的:
public function loadUser(LdapUserEvent $event) {
$ldapUser = $event->getUser();
[...]
$ldapUser->setLocalUser($localUser);
$ldapUser->addRole('ROLE_USER');
[...]
}
这很好用,除了每当我的用户更改页面(例如从/login_check
到/dashboard
)时,我对 的修改都会security.context.getToken().getUser()
丢失。我的用户有一个localUser
和ROLE_USER
关联 on /login_check
,但它没有 on /dashboard
。
因为我的用户不是从我的应用程序的数据库中加载的,所以我无法将其保存在数据库中以在后续页面点击中加载,因此,如果不保存另一个会话变量,就无法保存我的对象更改。
有谁知道我应该怎么处理这个?
谢谢你。