首页 >后端开发 >php教程 >Symfony2注册和登录

Symfony2注册和登录

Joseph Gordon-Levitt
Joseph Gordon-Levitt原创
2025-02-17 11:23:09817浏览

>本文详细介绍了Symfony2的用户注册,登录和Login后流程。 我们将在第1部分的数据库和安全配置上构建,重点介绍表单创建,用户对象持久性和安全密码处理。

Symfony2 Registration and Login

密钥概念:

  • 注册:>表单收集用户数据(电子邮件,用户名,密码等),将其映射到aUser>对象,并将此对象粘贴到数据库中。 自定义表单类型(RegistrationType)管理字段映射和数据处理。 应用程序会自动放大安全密码。
  • >
  • 登录:一个简单的登录表单,提交给/login_check,要求“ _username”和“ _password”字段 - 如Symfony的安全系统所规定的。
  • >
  • > login后动作:>
表格,数据库和

> RegistrationType注册过程使用表单。 (位于

>中)定义了表单的结构:>

RegistrationType>src/AppBundle/Form/Type/RegistrationType.php>防止“确认”字段保存到数据库中。 该表格是使用twig创建并渲染的:

<code class="language-php">class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('username', 'text', ['label' => 'User Name'])
                ->add('password', 'password', ['label' => 'Password'])
                ->add('confirm', 'password', ['mapped' => false, 'label' => 'Re-type password'])
                ->add('homepage', 'text', ['label' => 'Homepage'])
                ->add('email', 'hidden', ['label' => 'email'])
                ->add('save', 'submit', ['label' => 'Register']);
    }

    // ... (getName and setDefaultOptions methods) ...
}</code>

'mapped' => false

<code class="language-twig">{{ form_widget(form.username, {'attr': {'class': 'form-control', 'placeholder':'User Name'}}) }}
{{ form_widget(form.password, {'attr': {'class': 'form-control', 'placeholder':'Password'}}) }}
{{ form_widget(form.confirm, {'attr': {'class': 'form-control', 'placeholder':'Confirm Password'}}) }}
{{ form_widget(form.homepage, {'attr': {'class': 'form-control', 'placeholder':'Homepage'}}) }}
{{ form_widget(form.email, {'attr': {'value': email}}) }}
<!-- ... rest of the form ... --></code>

用户创建:Symfony2 Registration and Login

处理表单提交,创建a

对象,设置非用户提供的属性(创建的日期,角色,gravatar),使用Symfony的密码编码来加密密码,并坚持用户:>>>>>>

createActionUser>登录和login后处理:

>
<code class="language-php">public function createAction(Request $req)
{
    // ... (get entity manager, create form, handle request) ...

    $user = $form->getData();
    $user->setCreated(new \DateTime());
    $user->setRoles(['ROLE_USER']);
    // ... (set gravatar and active status) ...

    $pwd = $user->getPassword();
    $encoder = $this->container->get('security.password_encoder');
    $pwd = $encoder->encodePassword($user, $pwd);
    $user->setPassword($pwd);

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

    return $this->redirect($this->generateUrl('login'));
}</code>
登录表格(指向

)很简单:>

/login_check

> login后操作需要自定义身份验证成功处理程序(在
<code class="language-twig"><!-- ... login form with _username and _password fields ... --></code>
中定义,在

>中注册):Symfony2 Registration and Login >

成功身份验证后,此处理程序更新src/AppBundle/Handler/AuthenticationSuccessHandler.php>对象中的字段。services.yml

>本综合指南涵盖了Symfony2的注册和登录功能,强调了安全性最佳实践和可定制性。 可以根据特定的应用程序要求探索进一步的自定义,例如表单验证和社会登录集成。
<code class="language-php">class AuthenticationSuccessHandler extends DefaultAuthenticationSuccessHandler
{
    // ... (constructor with dependency injection) ...

    public function onAuthenticationSuccess(Request $request, TokenInterface $token)
    {
        $user = $token->getUser();
        $user->setLogged(new \DateTime());
        $em = $this->container->get('doctrine.orm.entity_manager');
        $em->persist($user);
        $em->flush();
        return $this->httpUtils->createRedirectResponse($request, $this->determineTargetUrl($request));
    }
}</code>
>

以上是Symfony2注册和登录的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn