2016-12-07 2 views
0

J'ai implémenté FOSOAuthServerBundle avec Symfony2.8 avec succès et cela a fonctionné. Lorsque j'ai essayé de travailler avec Symfony3.2 j'avais une erreur:FOSOAuthServerBundle vs Symfony3 Security howto

Vous avez tenté de charger la classe "SecurityContext" à partir de l'espace de noms "Symfony \ Component \ Security \ Core". Avez-vous oublié une instruction "use" pour un autre espace de nom?

Donc, j'ai googlé et je sais maintenant que SecurityContext n'existe plus dans Symofny 3.2. Mais dans la documentation officielle de FOSOAuthServerBundle "A Note About Security" existe toujours la fonction loginAction() seulement compactible avec symfony2. Question: - Puis-je utiliser ce kit avec Symfony 3.2? - Si oui, y a-t-il de la documentation sur la façon de le faire, ou mieux par exemple?

vous remercie beaucoup de réponses

Répondre

1

Ne sait pas FOSOAuthServerBundle en détail. Mais je suppose que l'exemple dans la documentation de l'ensemble au a_note_about_security est juste périmé.

Le service security.context était obsolète depuis symfony 2.6. Vous trouverez une description des changements: symfony.com/blog/new-in-symfony-2-6-security-component-improvements

Vous pouvez essayer de remplacer \Symfony\Component\Security\Core\SecurityContext avec \Symfony\Component\Security\Core\Security

<?php 
// src/Acme/SecurityBundle/Controller/SecurityController.php 

namespace Acme\SecurityBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\Security\Core\Security; 

class SecurityController extends Controller 
{ 
    public function loginAction() 
    { 
     $request = $this->getRequest(); 
     $session = $request->getSession(); 

     // get the login error if there is one 
     if ($request->attributes->has(Security::AUTHENTICATION_ERROR)) { 
      $error = $request->attributes->get(Security::AUTHENTICATION_ERROR); 
     } else { 
      $error = $session->get(Security::AUTHENTICATION_ERROR); 
      $session->remove(Security::AUTHENTICATION_ERROR); 
     } 

     // Add the following lines 
     if ($session->has('_security.target_path')) { 
      if (false !== strpos($session->get('_security.target_path'), $this->generateUrl('fos_oauth_server_authorize'))) { 
       $session->set('_fos_oauth_server.ensure_logout', true); 
      } 
     } 

     return $this->render('AcmeSecurityBundle:Security:login.html.twig', array(
      // last username entered by the user 
      'last_username' => $session->get(Security::LAST_USERNAME), 
      'error'   => $error, 
     )); 
    } 
} 
+0

oui, vous avez raison, vous ne savez pas comment le faire. En tout cas, merci beaucoup. – milan74sa

0

I figured it out. Peut-être que ça aide quelqu'un.

public function loginAction(Request $request) { 

    $authenticationUtils = $this->get('security.authentication_utils'); 

    $error = $authenticationUtils->getLastAuthenticationError(); 
    $lastUsername = $authenticationUtils->getLastUsername(); 

    return $this->render('AppBundle:Security:login.html.twig', array(
       'last_username' => $lastUsername 
       , 'error' => $error 
    )); 
}