Site Overlay

Implémenter son propre SecurityController

<?php

utilisation JMSSecurityExtraBundleAnnotationSécurisé;

utilisation SensioOffre groupéeFrameworkExtraBundleConfigurationMéthode;

utilisation SensioOffre groupéeFrameworkExtraBundleConfigurationItinéraire;

utilisation SensioOffre groupéeFrameworkExtraBundleConfigurationModèle;

utilisation SymfonyOffre groupéeFrameworkBundleContrôleurContrôleur;

utilisation SymfonyComposantHttpFoundationDemande;

utilisation SymfonyComposantSécuritéNoyauSecurityContext;

classe Contrôleur de sécurité étend Contrôleur

{

* @Méthode({ » GET « })

* @Route( » /login « , name= « login « )

* @Template()

*/

public fonction connexion(Demande $request)

{

$request = $this->getRequest() ;

$session = $request->getSession() ;

si ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {

$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR) ;

} autre {

$error = $session->get(SecurityContext::AUTHENTICATION_ERROR) ;

$session->remove(SecurityContext::AUTHENTICATION_ERROR) ;

}

$params = tableau(

 » last_username «  =&gt ; $session->get(SecurityContext::LAST_USERNAME),

 » erreur «  =&gt ; $error,

 » message «  =&gt ; $request->get( » message « ),

) ;

si ($request->isXmlHttpRequest()) {

return $this->render( » GCDirectoryMainBundle:Security:login-ajax.html.twig « , $params) ;

}

retour $params ;

}

* @Méthode({ » POST « })

* @Route( » /login_check « , name= « login_check « )

*/

public fonction vérifier()

{

jeter nouveau RuntimeException(‘Vous devez configurer le chemin de vérification pour qu’il soit géré par le pare-feu en utilisant form_login dans la configuration de votre pare-feu de sécurité.’) ;

}

* @Méthode({ » GET « })

* @Route( » /logout « , name= « logout »)

*/

public fonction déconnexion()

{

jeter nouveau RuntimeException(‘Vous devez activer la déconnexion dans la configuration de votre pare-feu de sécurité.’) ;

}

* @Méthode({ » GET « })

* @Route( » /reset « , name= « reset »)

* @Secure(roles= « IS_AUTHENTICATED_ANONYMOUSLY « )

* @Template()

*/

public fonction réinitialisation() {

retour tableau() ;

}

* @Méthode({ » POST « })

* @Route( » /reset « )

* @Secure(roles= « IS_AUTHENTICATED_ANONYMOUSLY « )

*/

public fonction resetNow(Demande $request)

{

$params = $request->request->all() ;

if (!array_key_exists( » login « , $params)) {

jeter nouveau Exception( » Pas de login donné « ) ;

}

$login = &$params[« login »];

Lire  OBS Studio 28.1.2 Télécharger | TechSpot

$em = $this->container->get( » doctrine.orm.default_entity_manager « ) ;

$user = $em->getRepository( » NamespaceMyBundle:User « )->findOneBy(array( » login «  =&gt ; $login)) ;

si ($user == null) {

return $this->redirect($this->generateUrl( » login « , tableau())) ;

}

$password =  » myRandowPassword « ;

$user->setPassword($this->container->get( » security.encoder_factory « )->getEncoder($user)->encodePassword($password, $user->getSalt())) ;

$em->persist($user) ;

$em->flush() ;

retour $this->redirect($this->generateUrl( » login « , tableau())) ;

}

* @Méthode({ » GET « })

* @Route( » /change « , name= « change-password « )

* @Secure(roles= « IS_AUTHENTICATED_FULLY « )

* @Template()

*/

public fonction changer() {

retour tableau() ;

}

* @Méthode({ » POST « })

* @Route( » /change « )

* @Secure(roles= « IS_AUTHENTICATED_FULLY « )

* @Template()

*/

public fonction changeNow(Demande $request)

{

$params = $request->request->all() ;

if (!array_key_exists( » courant « , $params)

|| !array_key_exists( » nouveau « , $params)

|| !array_key_exists( » new2 « , $params))

{

retour tableau( » erreur «  =&gt ;  » Veuillez remplir tous les champs « ) ;

}

$em = $this->container->get( » doctrine.orm.default_entity_manager « ) ;

$user = $this->getUser() ;

$user_encoders = $this->container->get( » security.encoder_factory « )->getEncoder($user) ;

$user_repository = $em->getRepository( » NamespaceMyBundle:User « ) ;

$current_password_encoded = $user_encoders->encodePassword($params[« current »], $user->getSalt()) ;

$new_password_encoded = $user_encoders->encodePassword($params[« new »], $user->getSalt()) ;

si ($user_repository->findOneBy(array( » mot de passe «  =&gt ; $current_password_encoded)) == null) {

return tableau( » erreur «  =&gt ;  » Le mot de passe actuel est incorrect « ) ;

} elseif ($params[« new »] != $params[« new2 »]) {

return tableau( » erreur «  =&gt ;  » Les deux champs mot de passe ne sont pas les mêmes « ) ;

}

$user->setPassword($new_password_encoded) ;

$em->persist($user) ;

$em->flush() ;

retour $this->redirect($this->generateUrl( » logout « , tableau())) ;

}

* @Méthode({ » GET « })

* @Route( » /register « , name= « register »)

* @Secure(roles= « IS_AUTHENTICATED_ANONYMOUSLY « )

* @Template()

*/

public fonction registre()

Lire  Comment trouver le FAI le plus rapide dans votre région

{

$form = $this->createForm(nouveau UserType(UserType::REGISTER), nouveau User()) ;

retour tableau(

 » formulaire «  =&gt ; $form->createView(),

) ;

}

* @Méthode({ » POST « })

* @Route( » /register « )

* @Secure(roles= « IS_AUTHENTICATED_ANONYMOUSLY « )

* @Template()

*/

public fonction registerNow(Demande $request)

{

$params = $request->request->all()[« name_of_my_form »];

$form = $this->createForm(nouveau UserType(UserType::REGISTER), nouveau User()) ;

$form->submit($request) ;

si (array_key_exists( » plain_password « , $params) &&amp ; array_key_exists( » plain_password2 « , $params) &&amp ; $params[« plain_password »] == $params[« plain_password2 »]) {

if ($form->isValid()) {

$data = $form->getData() ;

$data->setPassword($this->container->get( » security.encoder_factory « )->getEncoder($data)->encodePassword($params[« plain_password »], $data->getSalt())) ;

$em->persist($data) ;

$em->flush() ;

retour $this->redirect($this->generateUrl( » login « , tableau( » message «  =&gt ;  » Vous avez reçu un email pour valider votre compte. « ))) ;

}

}

retour tableau(

 » erreurs «  =&gt ; $params[« plain_password »] == $params[« plain_password2 »] ? $form->getErrors() : array( » Les deux mots de passe doivent être identiques « ),

 » formulaire «  =&gt ; $form->createView(),

) ;

}

* @Méthode({ » GET « })

* @Route( » /activate « , name= « activate »)

* @Secure(roles= « IS_AUTHENTICATED_ANONYMOUSLY « )

* @Template()

*/

public fonction activer(Demande $request) {

$params = tableau() ;

$token = $request->query->get( » token « ) ;

$em = $this->container->get( » doctrine.orm.default_entity_manager « ) ;

$user = $em->getRepository( » NamespaceMyBundle:User « )->findOneBy(array( » token «  =&gt ; $token)) ;

si ($user != null) {

$user->setActive(User::ACTIVE_ACTIVE) ;

$em->persist($user) ;

$em->flush() ;

$params[« activate »] = vrai;

} autre {

$params[« activate »] = faux;

}

retour $params ;

}

}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *