この記事では、Symfony2のユーザー登録、ログイン、およびロジン後のプロセスについて詳しく説明しています。 フォームの作成、ユーザーオブジェクトの永続性、およびパスワード処理を安全にすることに焦点を当て、パート1のデータベースとセキュリティ構成の上に構築されます。
重要な概念:
User
)は、フィールドマッピングとデータ処理を管理します。 アプリケーションは、セキュリティのためにパスワードを自動的にハッシュします。RegistrationType
/login_check
RegistrationType
登録プロセスはフォームを使用します。 (
RegistrationType
src/AppBundle/Form/Type/RegistrationType.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) ... }
'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 ... -->
ユーザー作成:
createAction
User
ログインフォーム(
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 ... -->
このハンドラーは、認証を成功させた後、
以上がSymfony2登録とログインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。