首頁 > 後端開發 > php教程 > Symfony2註冊和登錄

Symfony2註冊和登錄

Joseph Gordon-Levitt
發布: 2025-02-17 11:23:09
原創
820 人瀏覽過

>本文詳細介紹了Symfony2的用戶註冊,登錄和Login後流程。 我們將在第1部分的數據庫和安全配置上構建,重點介紹表單創建,用戶對象持久性和安全密碼處理。

Symfony2 Registration and Login

密鑰概念:

  • 註冊:>表單收集用戶數據(電子郵件,用戶名,密碼等),將其映射到aUser>對象,並將此對象粘貼到數據庫中。 自定義表單類型(RegistrationType)管理字段映射和數據處理。 應用程序會自動放大安全密碼。
  • >
  • 登錄:一個簡單的登錄表單,提交給/login_check,要求“ _username”和“ _password”字段 - 如Symfony的安全系統所規定的。
  • >
  • > login後動作:>
表格,數據庫和

> RegistrationType註冊過程使用表單。 (位於

>中)定義了表單的結構:>

RegistrationType>src/AppBundle/Form/Type/RegistrationType.php>防止“確認”字段保存到數據庫中。 該表格是使用twig創建並渲染的:

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) ...
}
登入後複製

'mapped' => false

{{ 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 ... -->
登入後複製

用戶創建:Symfony2 Registration and Login

處理表單提交,創建a

對象,設置非用戶提供的屬性(創建的日期,角色,gravatar),使用Symfony的密碼編碼來加密密碼,並堅持用戶:< ancy>>>>>>>

createActionUser>登錄和login後處理:

>
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'));
}
登入後複製
登錄表格(指向

)很簡單:>

/login_check

> login後操作需要自定義身份驗證成功處理程序(在
<!-- ... login form with _username and _password fields ... -->
登入後複製
中定義,在

>中註冊):Symfony2 Registration and Login >

成功身份驗證後,此處理程序更新src/AppBundle/Handler/AuthenticationSuccessHandler.php>對像中的字段。 services.yml

>本綜合指南涵蓋了Symfony2的註冊和登錄功能,強調了安全性最佳實踐和可定制性。 可以根據特定的應用程序要求探索進一步的自定義,例如表單驗證和社會登錄集成。
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));
    }
}
登入後複製
>

以上是Symfony2註冊和登錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板