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
ユーザーがアプリのデータベースから読み込まれないため、後続のページヒットで読み込まれるようにデータベースに永続化できません。したがって、別のセッション変数を保存せずにオブジェクトの変更を永続化することはできません。
誰かが私がこれを処理することになっていることを知っていますか?
ありがとうございました。