Symfony4.4로 로그인한 후 역할로 표시되는 페이지 변경

도전



심포니로 로그인 양식을 만들었습니다.
사용자는 일반과 관리자의 두 가지 역할이 있으며 로그인 후 페이지를 변경하고 싶습니다.

전제



로그인 처리는, 공식 문서의 How to Build a Login Form 로 구현

로그인 후 리디렉션 대상 변경 사항 조사



키워드 "symfony login redirect role"로 구그하면, symfony2 의 문서만으로 옵니다.



검색결과에서 다음과 같은 문서를 찾아보고 보고, 아무래도 로그인 후의 이벤트로 처리하는 것 같은 느낌과 닿습니다. Symfony2이기 때문에 아테에게는 안 되는데, 이것이 실수의 원이었습니다.
  • How to redirect to different url based on roles in symfony 2
  • How redirect in onSecurityInteractiveLogin method in LoginListener - Symfony2

  • 여러가지 시행착오해 보고, 리다이렉트의 리스폰스를 재작성한다고 하는 것은, 훅으로 하는 것 같은 처리가 아닐까 결론.

    How to Build a Login Form 의 3단계에 기재된 onAuthenticationSuccess 메소드에 손을 넣는 것으로 종료.

    이런 느낌으로 해결할 수 있었습니다.

    src/Security/LoginFormAuthenticator.php
      public function __construct(UrlGeneratorInterface $urlGenerator, Security $security)
        {
            $this->urlGenerator = $urlGenerator;
            $this->security = $security;
        }
    
        public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
        {
            if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
                return new RedirectResponse($targetPath);
            }
    
            if ($this->security->isGranted('ROLE_ADMIN')) {
                return new RedirectResponse($this->urlGenerator->generate('admin_main'));
            }
            return new RedirectResponse($this->urlGenerator->generate('user_main'));    }
    

    그 밖에 빠진 것



    세션에 로그인하기 전에 액세스에 온 URL을 저장하고 있으므로 로그인 후 원하는 페이지를 표시하게 되어 있습니다.

    올바른 절차로 로그아웃을 하면, 이 세션 정보는 사용되지 않는다고 생각하고 있었습니다만, 일반 페이지가 기록되고 있었던 것 같습니다.

    여러 번 관리자로 로그인해도 항상 일반 페이지가 표시되어 구현 방법에 문제가 있는지 더 시간이 걸렸습니다.

    쿠키를 삭제하여 세션 정보를 재설정하면 예상대로 동작했습니다.

    요약



    낡은 문서나 자원은 무시하지 않으면, 다른 방향으로 데려가는 경우가 있다.

    좋은 웹페이지 즐겨찾기