2016-04-26 2 views
0

Ich habe versucht, symfony durch Programmierung anmelden, aber wenn Redirect auf neue Route der Benutzer zurück zu Anon. Benutzer.Warum kann ich mich nicht in symfony einloggen?

security.yml

security: 
    encoders: 
     Symfony\Component\Security\Core\User\User: plaintext 

    providers: 
     in_memory: 
      memory: 
       users: 
        admin: 
         password: pass 
         roles: ROLE_ADMIN 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 

     main: 
      anonymous: ~ 
      form_login: ~ 

     login_firewall: 
      pattern: ^/login$ 
      anonymous: ~ 

     secured_area: 
      pattern: ^/ 
      form_login: ~ 

    access_control: 
     - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/, roles: ROLE_ADMIN } 

loginaction

public function loginAction(Request $request) 
{ 
    if ($request->getMethod() === 'POST') 
    { 
     $firewall = 'main'; 

     $user = new User('User', 'pass', array('ROLE_ADMIN')); 

     $token = new UsernamePasswordToken($user, $user->getPassword(), $firewall, $user->getRoles()); 

     $this->get("security.token_storage")->setToken($token); 

     $session = $this->get('session'); 
     $session->set('_security_'.$firewall, serialize($token)); 

     $event = new InteractiveLoginEvent($request, $token); 
     $this->get("event_dispatcher")->dispatch("security.interactive_login", $event); 

     return $this->redirect($this->generateUrl('admin')); 
    } 

    $authenticationUtils = $this->get('security.authentication_utils'); 
    $error = $authenticationUtils->getLastAuthenticationError(); 
    $lastUsername = $authenticationUtils->getLastUsername(); 

    return $this->render(
     'security/login.html.twig', 
     array(
      // last username entered by the user 
      'last_username' => $lastUsername, 
      'error'   => $error, 
     ) 
    ); 
} 

Problem: Der Login-Benutzer, aber wenn Umleitung wieder Admin Rückkehr zur Route mit Benutzer Anon anzumelden.

+0

Welche Version von Symfony verwenden Sie? Seit 2.5 oder so ist der Session-Quatsch nicht mehr nötig. – Cerad

+0

Symfony-Version ist 2.8.3 – HossamYoussof

Antwort

0

Sie entfernen sollten

form_login: ~

unter Haupt-Firewall in security.yml

In diesem Fall eine Ausnahme zeigen:

vollständige Authentifizierung ist erforderlich, um auf diese Ressource zuzugreifen

0

Hier ist eine einfache Utility-Klasse, die für 2,8/3,0 funktioniert. Es zeigt die benötigten Zeilen am unteren Rand. Wenn diese Art von Code nicht für Sie arbeiten dann haben Sie in der Tat eine Art von Firewall-Problem aber natürlich würde ich annehmen, dass Sie erwähnt haben, wenn Ihr waren immer Ausnahmen:

class ProjectUserLoginUser 
{ 
    /** @var EventDispatcherInterface */ 
    private $eventDispatcher; 

    /** @var TokenStorageInterface */ 
    private $securityTokenStorage; 

    private $firewallName; // main 

    public function __construct(
     $firewallName, 
     EventDispatcherInterface $eventDispatcher, 
     TokenStorageInterface $securityTokenStorage 
    ) 
    { 
     $this->firewallName   = $firewallName; 
     $this->eventDispatcher  = $eventDispatcher; 
     $this->securityTokenStorage = $securityTokenStorage; 
    } 
    public function loginUser(Request $request, UserInterface $user) 
    { 
     $token = new UsernamePasswordToken($user, null, $this->firewallName, $user->getRoles()); 

     $this->securityTokenStorage->setToken($token); 

     $event = new InteractiveLoginEvent($request, $token); 

     $this->eventDispatcher->dispatch(SecurityEvents::INTERACTIVE_LOGIN, $event); 
    } 
} 
+0

das gleiche Problem Symfony speichert Benutzer nicht in allen Routen, nach der Weiterleitung zurück zur Anmeldung mit anon Benutzer – HossamYoussof

+0

Dann ist es eine Firewall-Konfiguration Sache. Verwenden Sie die Standard-Symfony-Datei security.yml, um die Dinge zum Laufen zu bringen, und fügen Sie dann Ihre Anpassungen wieder hinzu. Ich selbst finde, dass das ganze Zugriffskontrollkram mehr Mühe macht, als es wert ist. Ich sichere nur Routen einzeln. – Cerad