我正在使用IMAG / Ldap-Bundle(BorisMorel / LdapBundle)对我的用户进行身份验证,并且我无法将对User
所做的任何更改保留到我的LDAP服务器。但是每当用户登录时,我都需要在本地检查一些内容并根据一些规则添加用户的角色。
每当imag验证我的LDAP服务器上的用户/密码时,它都会调用我创建的正在监听'bind'事件的服务。这是怎么回事:
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
和/login_check
,但/dashboard
上没有关联。
因为我的用户没有从我的应用程序的数据库加载,所以我无法将其保留在数据库中以便在后续的网页分页中加载,因此,如果不保存另一个会话变量,则无法保留我的对象更改。
有谁知道我应该怎么处理这个?
谢谢。
答案 0 :(得分:-2)
没有足够的代码来提供更好的答案,但我没有看到你在哪里修改security.context或令牌。
更改了从令牌获得的用户对象后,您可能需要将此修改后的用户设置为令牌。