gpt4 book ai didi

authentication - 如何修改当前用户的属性并在整个 session 中持久化它们

转载 作者:行者123 更新时间:2023-11-30 23:50:27 28 4
gpt4 key购买 nike

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

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

有人知道我应该怎么处理吗?

谢谢。

最佳答案

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

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

关于authentication - 如何修改当前用户的属性并在整个 session 中持久化它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14944410/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com