Butiran artikel ini Proses Pendaftaran Pengguna, Login, dan Post-Login Symfony2. Kami akan membina pangkalan data dan konfigurasi keselamatan dari Bahagian 1, yang memberi tumpuan kepada penciptaan bentuk, ketekunan objek pengguna, dan pengendalian kata laluan yang selamat.
Konsep Utama:
User
RegistrationType
/login_check
: RegistrationType
Proses pendaftaran menggunakan borang.
) mentakrifkan struktur bentuk: 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 ... -->
Penciptaan Pengguna:
mengendalikan penyerahan borang, mencipta objek
, menetapkan sifat bukan pengguna yang disediakan (tarikh yang dibuat, peranan, gravatar), menyulitkan kata laluan menggunakan encoder kata laluan Symfony, dan berterusan pengguna:
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')); }
borang log masuk (menunjuk ke ) adalah mudah:
/login_check
<!-- ... login form with _username and _password fields ... -->
dan didaftarkan dalam ):
src/AppBundle/Handler/AuthenticationSuccessHandler.php
pengendali ini mengemas kini medan services.yml
dalam objek
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)); } }
Panduan Komprehensif ini meliputi ciri pendaftaran dan log masuk Symfony2, menekankan amalan terbaik keselamatan dan kebolehcapaian. Penyesuaian selanjutnya, seperti Pengesahan Borang dan Integrasi Login Sosial, boleh diterokai berdasarkan keperluan aplikasi tertentu. logged
Atas ialah kandungan terperinci Pendaftaran dan Log masuk Symfony2. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!