Symfony에 등록한 후 고객을 자동으로 로그인하는 방법
기본 구성
시작하자
먼저 사용할 것입니다 :
php bin/console make:user
//I leave User by default
The name of the security user class (e.g. User) [User]:
>
// Yes I want to store it
Do you want to store user data in the database (via Doctrine)? (yes/no) [yes]:
>
//Default value (email) is good
Enter a property name that will be the unique "display" name for the user (e.g. email, username, uuid) [email]:
>
// Yes I want to hash password and I let SF do it for me
Will this app need to hash/check user passwords? Choose No if passwords are not needed or will be checked/hashed by some other system (e.g. a single sign-on server).
Does this app need to hash/check user passwords? (yes/no) [yes]:
>
이제 엔티티가 준비되었습니다. Symfony는 방금 User Entity와 UserRepository를 모두 만들었습니다.
이제 다음을 사용하여 인증을 추가해 보겠습니다.
php bin/console make:auth
// I choose 1 for the complete authenticator
What style of authentication do you want? [Empty authenticator]:
[0] Empty authenticator
[1] Login form authenticator
> 1
1
//I prefer to call it LoginFormAuthenticator
The class name of the authenticator to create (e.g. AppCustomAuthenticator):
> LoginFormAuthenticator
//It's fine for me
Choose a name for the controller class (e.g. SecurityController) [SecurityController]:
>
//Yes I want a logout URL
Do you want to generate a '/logout' URL? (yes/no) [yes]:
>
이제 src에 4개의 폴더가 있습니다.
제어 장치
실재
저장소
보안
마지막으로 확인해보자. 보시다시피 인증에 대한 모든 논리가 있습니다. 원하는 매개변수를 수정할 수 있습니다. 예를 들어 여기에서 이메일이 잘못된 경우 오류 메시지를 변경할 수 있습니다.
public function getUser($credentials, UserProviderInterface $userProvider)
{
$token = new CsrfToken('authenticate', $credentials['csrf_token']);
if (!$this->csrfTokenManager->isTokenValid($token)) {
throw new InvalidCsrfTokenException();
}
$user = $this->entityManager->getRepository(User::class)->findOneBy(['email' => $credentials['email']]);
if (!$user) {
// fail authentication with a custom error
throw new
CustomUserMessageAuthenticationException('Email could not be found.');
}
return $user;
}
사용자가 로그인되면 홈 페이지로 리디렉션하고 싶습니다. 이름이 "app_home"인 HomeController를 이미 생성했다고 가정해 보겠습니다.
LoginFormAuthenticator.php에는 onAuthenticationSuccess의 기능이 있습니다. 홈페이지로 리디렉션하여 기본값을 변경하겠습니다.
public function onAuthenticationSuccess(Request $request, TokenInterface $token, string $providerKey)
{
if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
return new RedirectResponse($targetPath);
}
//I will delete the below line
throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
//And replace it by this one
return new RedirectResponse($this->urlGenerator->generate('app_home'));
}
이제 사용자가 홈페이지로 리디렉션됩니다. 끝내자. 새 RegisterController와 양식을 만듭니다(어떻게 하는지 알 것 같아요 😉).
내 양식을 RegisterType이라고 불렀습니다. 이제 autowiring 덕분에 사용자가 등록 후에 로그인할 수 있도록 하려고 합니다. Request, EntityManager, UserPasswordEncoderInterface, LoginFormAuthentificator 및 GuardAuthenticatorHandler에 대해 autowiring을 사용합니다.
/**
* @Route("/register", name="app_register")
*/
public function registration(Request $request, EntityManagerInterface $manager,UserPasswordEncoderInterface $passwordEncoder, LoginFormAuthentificator $login, GuardAuthenticatorHandler $guard)
{
//Basic code for registration
$user = new User();
$form = $this->createForm(RegisterType::class, $user);
$form->handleRequest($request);
//I always use a unmapped plainPassword for the real password
if ($form->isSubmitted() && $form->isValid()){
$user->setPassword($passwordEncoder->encodePassword($user, $form['plainPassword']->getData()));
$manager->persist($user);
$manager->flush();
//Just to be UX, I had a flash message
$this->addFlash('success', 'The registration is successfull');
//This is how the User could be logged after the registration
//Guard handle it
//'main' is your main Firewall. You can check it in config/packages/security.yaml
return $guard->authenticateUserAndHandleSuccess($user,$request,$login,'main');
}
return $this->render('security/registration.html.twig', ['form' => $form->createView(),]);
}
이것이 SF로 하는 방법입니다. 앞으로 등록하는 데 도움이 되기를 바랍니다!
그게 다야 여러분 😁
Reference
이 문제에 관하여(Symfony에 등록한 후 고객을 자동으로 로그인하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mis0u/how-to-automatically-login-customer-after-registration-with-symfony-15i9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)