3

我正在使用 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()丢失。我的用户有一个localUserROLE_USER关联 on /login_check,但它没有 on /dashboard

因为我的用户不是从我的应用程序的数据库中加载的,所以我无法将其保存在数据库中以在后续页面点击中加载,因此,如果不保存另一个会话变量,就无法保存我的对象更改。

有谁知道我应该怎么处理这个?

谢谢你。

4

1 回答 1

-2

没有足够的代码来提供更好的答案,但我看不到您在哪里修改 security.context 或令牌。

对从令牌中获得的用户对象进行更改后,您可能需要将此修改后的用户设置为令牌。

于 2013-02-21T18:40:48.607 回答