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
은 사용자가 로그인하고 User
클래스 내 security.context
에로드 된 후 LdapUserVerifierService::loadUser
만 호출됩니다 의미 false
로 설정됩니다.
그럼 내가 가진 내이 같은 LdapUserVerifierService::loadUser
다음 security.context.getToken().getUser()
내 사용자의 변경 (예를 들어 /login_check
에서 /dashboard
에) 페이지, 내 수정이 손실 될 때마다 것을 제외하고, 좋은 작품
public function loadUser(LdapUserEvent $event) {
$ldapUser = $event->getUser();
[...]
$ldapUser->setLocalUser($localUser);
$ldapUser->addRole('ROLE_USER');
[...]
}
. 내 사용자의 및 ROLE_USER
은 /login_check
에 연결되어 있지만 /dashboard
에는 연결되지 않습니다.
내 사용자가 내 앱의 데이터베이스에서로드되지 않았기 때문에 데이터베이스에 저장하여 이후 페이지에로드 할 수 없으므로 다른 세션 변수에 저장하지 않고 개체 변경 사항을 유지할 수 없습니다.
아무도 내가 이것을 처리해야하는 것을 알고 있습니까?
감사합니다.
'SecurityContext'를 수정 한 코드를 보여줄 수 있습니까? – cheesemacfly
이벤트 토큰에 대한 변경 사항은 둘 다 동일한 토큰 개체를 가리 키기 때문에 보안 컨텍스트 토큰에 유지되어야합니다. 나는 명시 적으로 security_context에 변경 사항을 저장하지 않습니다. 나는 setToken 또는 뭔가 부를 수 있다고 생각합니다. 내가 한번 시도해 보자. –
아니요. 오류가 남아 있습니다. 'kernel.event_listener'에 리스너를 추가하고 모든 작업에서 권한을 다시로드합니다. 이것은 최적의 해결 방법은 아니지만 (다른 곳에서는 찾아 볼 수 없습니다.) 다른 방법을 찾을 때까지이 방법을 계속 사용하겠습니다. –