发送用户电子邮件的唯一链接

时间:2014-01-30 20:30:27

标签: symfony

我正在尝试邀请用户登录我的后端系统。当使用用户的姓氏,名字,中间名,电子邮件和消息(可选)提交表单时,它应该发送一个唯一的链接到用户的电子邮件,让他们知道他们被邀请。单击链接后,它会将它们带到一个页面,在该页面中,他们可以为帐户创建用户名和密码(不需要此部分的帮助)。

查看文件:

    {% extends '::base.html.twig' %}

    {% block body %}
    <div class="container">

    <div class="row">
        <div class="col-md-8">
            <h1>Invite Teacher</h1> 
        </div>

    </div>

    <div class="row">
        <div class="col-md-12">
            {{ form_errors(newTeacherForm) }}
            <form id="new_teacher_form" class="form-horizontal" role="form" action="{{ path('t60_cms_super_usermanagement_inviteteacher', {'account_id': account_id }) }}" method="post" {{ form_enctype(newTeacherForm) }}>
            <div class="row" style="margin-top:50px;">
                <div class="col-md-5">
                    {{ form_widget(newTeacherForm.lastname, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'Last Name'}}) }} 
                </div>
                <div class="col-md-6">
                    {{ form_widget(newTeacherForm.firstname, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'First Name'}}) }}
                </div>

                <div class="col-md-1">
                    {{ form_widget(newTeacherForm.middleinitial, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'MI'}}) }}
                </div> 
            </div>
            <div class="row" style="margin-top:50px;">
                <div class="col-md-12">
                    {{ form_widget(newTeacherForm.email, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'Email'}}) }} 
                </div>
            </div>
            <hr/>
            <div class="row" style="margin-top:50px;">
                <div class="col-md-12">
                    {{ form_widget(newTeacherForm.lastname, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'Message (Optional)'}}) }} 
                </div>
            </div>
            {{ form_rest(newTeacherForm) }}
        </div>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Back</button>
        <button type="submit" class="btn btn-default">Invite Teacher</button>
    </div>
</form>
            </div>
       </div>
</div>
{% endblock body %}

ROUTE:

t60_cms_super_usermanagement_inviteteacher:
    pattern: /cms/usermanagement/invteacher/{account_id}
    defaults: { _controller:Think60SiteBundle:SuperAdmin:inviteTeacher }

控制器:

public function inviteTeacherAction($account_id)
    {
        $em = $this->getDoctrine()->getManager();
        $repos = $em->getRepository('Think60SiteBundle:Account');
        $query = $repos->createQueryBuilder('p')
            ->where('p.id = :account_id')
            ->setParameter('account_id', $account_id)
            ->getQuery();
        $account = $query->getSingleResult();

        $newTeacherForm = $this->createFormBuilder()
            ->add('lastname', 'text')
            ->add('firstname', 'text')
            ->add('middleinitial', 'text')
            ->add('email', 'email')
            ->getForm();
        if($newTeacherForm->isValid()){
            $message = \Swift_Message::newInstance()
                ->setSubject('Your Invited To Join Think60')
                ->setFrom('send@example.com')
                ->setTo('recipient@example.com')
                ->setBody(
                    $this->renderView(
                        'Think60SiteBundle:SuperAdmin:email.txt.twig',
                        array('name' => $name)
                    ));
            $this->get('mailer')->send($message);
        }   
    return $this->render('Think60SiteBundle:SuperAdmin:inviteteacher.html.twig', array(
            'newTeacherForm' => $newTeacherForm->createView(),
            'account_id' => $account_id,
        ));
    }

我知道控制器在多个位置可能是错误的,因为我不是100%这是如何工作的。所以它处于不稳定的状态。但提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有多种方法可以解决这个问题。但我认为最简单的方法是创建一个&#34;邀请&#34;包含唯一且不可猜测的ID的实体,以及受邀用户的电子邮件地址。

邀请链接包含邀请ID作为网址的一部分(例如/ join / 37d2e90ab3)。如果用户调用此URL,请将id放入其会话中。

仅当会话包含有效的邀请ID时才可以注册。注册成功后,从会话中删除ID并删除邀请实体(或将其标记为已使用)。