2016-08-08 13 views
0

お会いできてよかったです。symfony 3.1登録メールなしFOSUser

私はSymfony 3.1.3で開発していますが、フレームワークが提供するセキュリティシステムを使用しています.FOSUserもGuardもありません。

私は私のコントローラで、一般的な機能を持っているログイン:

public function loginAction(Request $request) 
{ 
    // This works 
    $authenticationUtils = $this->get('security.authentication_utils'); 

    // get the login error if there is one 
    $error = $authenticationUtils->getLastAuthenticationError(); 

    // last username entered by the user 
    $lastUsername = $authenticationUtils->getLastUsername(); 

    return $this->render(
     'security/loginForm_old.html.twig', 
     array(
      // last username entered by the user 
      'last_username' => $lastUsername, 
      'error'   => $error, 
     ) 
    ); 
} 

をそして私は、ユーザーが自分のアカウントを有効にしているかどうかを確認します。エンティティユーザでは、isActive属性がデフォルトでfalseに設定されており、登録メールへのリンクのみがtrueに設定されています。

私はこの問題を結果なしで探しており、これは非常に一般的なものだと確信しています。ユーザーの電子メールが良いかどうかを誰もが確認したいと思っています。

ありがとうございました。

答えて

2

ユーザーの登録について管理するすべてのコードを保存するRegistrationController.phpクラスがあるとします。ユーザーが存在する場合

public function sendConfirmationEmailMessage(User $user) 
{ 

    $confirmationToken = $user->getConfirmationToken(); 
    $username = $user->getUsername(); 

    $subject = 'Account activation'; 
    $email = $user->getEmail(); 

    $renderedTemplate = $this->templating->render('AppBundle:Emails:registration.html.twig', array(
     'username' => $username, 
     'confirmationToken' => $confirmationToken 
    )); 

    $message = \Swift_Message::newInstance() 
      ->setSubject($subject) 
      ->setFrom(MAILER_FROM) 
      ->setReplyTo(MAILER_FROM) 
      ->setTo($email) 
      ->setBody($renderedTemplate, "text/html"); 

    $this->mailer->send($message); 

} 

引数として生成されたトークンを取る関数に関連したルートを作成し、そのトークンによってユーザーを検索し、アクティブにします:

登録後、ユーザーに電子メールを送信関数を作成

あなたが実際にユーザーを登録する機能を持っている場合、以下のように
/** 
* @Route("user/activate/{token}") 
*/ 
public function confirmAction(Request $request, $token) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $repository = $em->getRepository('AppBundle:User'); 

    $user = $repository->findUserByConfirmationToken($token); 

    if (!$user) 
    { 
     throw $this->createNotFoundException('We couldn\'t find an account for that confirmation token'); 
    } 

    $user->setConfirmationToken(null); 
    $user->setEnabled(true); 

    $em->persist($user); 
    $em->flush(); 

    return $this->redirectToRoute('user_registration_confirmed'); 
} 

は、その後、あなたはsendConfirmationEmailMessageを呼び出す:

public function registerAction(Request $request) 
{ 
    /* All the logic goes here: form validation, creating new user */ 
    /* $user is created user */ 
    sendConfirmationEmailMessage($user); 
} 

とにかくisActive()関数がfalseを返す場合Symfonyセキュリティシステムはあなたのログインを妨げます。 UserエンティティはUserInterfaceを実装する必要があります。

+0

ありがとうございました。あなたは私が持っていたすべての疑問に答えました。私は.....のためにいくつかの仕事を持っています:-) – Carlos

関連する問題