Dieser Artikel beschreibt die Benutzerregistrierung, Anmeldung und Post-Login-Prozesse von Symfony2. Wir werden auf der Datenbank- und Sicherheitskonfiguration aus Teil 1 erstellen und sich auf die Erstellung von Formular, die Persistenz des Benutzerobjekts und das sicher
Schlüsselkonzepte:
User
) verwaltet die Feldzuordnung und die Datenbearbeitung. Die Anwendung hasst das Passwort automatisch für die Sicherheit. RegistrationType
/login_check
. Formular, Datenbank und : RegistrationType
(befindet sich in RegistrationType
) definiert die Struktur des Formulars: 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) ... }
verhindert, dass das Feld "Bestätigung" in der Datenbank gespeichert wird. Das Formular wird erstellt und unter Verwendung von Twig: 'mapped' => false
erstellt und gerendert
{{ 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 ... -->
Benutzererstellung:
Die -Formungseinreichung erstellt ein createAction
Objekt, legt nicht Benutzer bereitgestellt.
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')); }
Die Anmeldeform (auf
zeigt) ist einfach:
/login_check
<!-- ... login form with _username and _password fields ... -->
Post-Login-Aktionen erfordern einen benutzerdefinierten Authentifizierungserfolgshandler (definiert in
registriert): 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)); } }
nach erfolgreicher Authentifizierung. logged
User
Dieser umfassende Leitfaden deckt die Registrierung und Login -Funktionen von Symfony2 ab und betont die Best Practices und die Anpassbarkeit der Sicherheitsdienste. Weitere Anpassungen wie Formularvalidierung und Integration der sozialen Anmeldung können anhand der spezifischen Anwendungsanforderungen untersucht werden.
Das obige ist der detaillierte Inhalt vonSymfony2 Registrierung und Anmeldung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!