>本文詳細介紹了Symfony2的用戶註冊,登錄和Login後流程。 我們將在第1部分的數據庫和安全配置上構建,重點介紹表單創建,用戶對象持久性和安全密碼處理。
密鑰概念:
User
>對象,並將此對象粘貼到數據庫中。 自定義表單類型(RegistrationType
)管理字段映射和數據處理。 應用程序會自動放大安全密碼。 /login_check
,要求“ _username”和“ _password”字段 - 如Symfony的安全系統所規定的。 :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 ... -->
用戶創建:
處理表單提交,創建a
對象,設置非用戶提供的屬性(創建的日期,角色,gravatar),使用Symfony的密碼編碼來加密密碼,並堅持用戶:< ancy>>>>>>>
createAction
User
>登錄和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 form with _username and _password fields ... -->
>中註冊):>
成功身份驗證後,此處理程序更新src/AppBundle/Handler/AuthenticationSuccessHandler.php
>對像中的字段。 services.yml
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中文網其他相關文章!