2012-04-12 3 views
2

Beim Versuch, mich anzumelden, sagt mir Symfony2, dass ich die falschen Anmeldeinformationen angegeben habe. Zweiter Versuch funktioniert. Irgendwelche Ideen, warum das passieren könnte? Um das Verhalten zu reproduzieren, muss ich mich abmelden, Cookies löschen, zur Anmeldeseite zurückkehren und mich erneut anmelden.Symfony2: Anmeldung funktioniert nicht beim ersten Versuch nach dem Löschen von Cookies

Ich verwende FOSUserBundle.

config.yml:

framework: 
#esi:    ~ 
secret:   asdfsadfasdf 
#translator:  { fallback: en } 
charset:   UTF-8 
router:   { resource: "%kernel.root_dir%/config/routing.yml" } 
form:   true 
csrf_protection: true 
validation:  { enable_annotations: true } 
templating:  { engines: ['twig'], assets_version: v1.2 } #assets_version: SomeVersionScheme 
translator:  { fallback: de } 

session:  
    default_locale: de 
    auto_start:  false 
    lifetime:  1000000 
... 

security.yml:

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

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 


providers: 
    fos_userbundle: 
     id: fos_user.user_manager 

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

    public: 
     pattern: ^/.* 
     form_login: 
      provider: fos_userbundle 
      check_path: /login_check 
      remember_me: true 
     remember_me: 
      key:  aaasfasdfasdfsadfsadf 
      lifetime: 1296000 #15 days in second 
      path: /
     anonymous: true 
     logout: true 


access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY} 
    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY} 
    #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 } 
    - { path: ^/events/create, roles: ROLE_USER } 
    #... 
acl: 
    connection: default 

routing.yml:

_imagine: 
    resource: . 
    type:  imagine 

_index: 
    resource: "@AjadoEventHubBundle/Controller/IndexController.php" 
    type:  annotation 

fos_comment_api: 
    type: rest 
    resource: "@FOSCommentBundle/Resources/config/routing.yml" 
    prefix: /api 

fos_user_security: 
    resource: "@FOSUserBundle/Resources/config/routing/security.xml" 
... 

@ FOSUserBundle/Ressourcen/config/Routing/security.xml:

<routes xmlns="http://symfony.com/schema/routing" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd"> 

    <route id="fos_user_security_login" pattern="/login"> 
     <default key="_controller">FOSUserBundle:Security:login</default> 
    </route> 

    <route id="fos_user_security_check" pattern="/login_check"> 
     <default key="_controller">FOSUserBundle:Security:check</default> 
    </route> 

    <route id="fos_user_security_logout" pattern="/logout"> 
     <default key="_controller">FOSUserBundle:Security:logout</default> 
    </route> 

</routes> 
+1

Versuchen Sie, den entsprechenden Code zu Ihrer Frage hinzufügen: „Login“ in Symfony 2 sehr abstrakt ist. – ilanco

+0

@ilanco: lassen Sie mich wissen, wenn Sie mehr Code benötigen. Ich habe gerade herausgefunden, dass ich eine ziemlich alte Version von FOSUserBundle (6cdd9c292afa219ef799893061eaae1fc400ae33) verwende - werde versuchen, heute zu aktualisieren ... – stoefln

+0

Könnten Sie den Routing-Teil mit zeigt die Login-Routen, wenn vorhanden? –

Antwort

2

Auf meiner Meinung nach, ist dieses Verhalten erwartet, wie Sie die anonyme Authentifizierung aktiviert:

  • Sie URL Ihrer App, ohne> Cookie ist eine session = protokolliert wird mit Session-ID erstellt
  • Ein anonymer Token erstellt
  • Sie klar Cookie => nicht mehr Session-ID Sie
  • nächste Anforderung zu identifizieren, wird kein Token an Ihre Login-Anfrage angehängt ...
+0

Also was müsste ich tun, um das Verhalten loszuwerden? Entschuldigung, ich habe nur große Teile der Sicherheitskonfiguration kopiert und kenne die Bedeutung der einzelnen LOC nicht:/ – stoefln

+0

Warum sollten Sie die Löschung von Cookies auf der Anmeldeseite verwalten? – AlterPHP

+0

Eigentlich weiß ich nicht, was zu tun ist, um dieses Verhalten zu vermeiden ... – AlterPHP

1

Ich bin nicht vertraut mit Symfony, aber ich habe das gleiche Problem erlebt, wenn die Authentifizierungsprüfung nach einem gültigen Cookie gesucht hat, aber der Cookie wurde nach der Überprüfung erstellt - damit es das zweite Mal passiert, niemals die zuerst.

+0

Ja. Der Cookie wird offensichtlich erstellt, nachdem die Überprüfung durchgeführt wurde. – desbest

1

standardmäßig Symfony erfordern, dass eine Sitzung vor der Einreichung des Formulars aus der Dokumentation

# by default, a session must exist before submitting an authentication request 
# if false, then Request::hasPreviousSession is not called during authentication 
# new in Symfony 2.3 

Um

existieren werden müssen, um über kommen diese Sie „require_previous_session“ einstellen könnten (was standardmäßig true ist) bis false in der "security.yml" wie unter "form_login" wie folgt: require_previous_session: false

Sie könnten mehr darüber in Symfony docs in dem folgenden Link lesen SecurityBundle Configuration ("security")

0

Ich hatte dieses Problem und ich löste es im Anschluss an die Antwort hier Symfony 2 “Your session has timed out or you have disabled cookies”.

@AlterPHP richtig war, haben Sie zweimal, weil das erste Mal anmelden Sie einen Fehler wie folgt erhalten:

Authentication request failed. (...) Your session has timed out, or you have disabled cookies.

Wie Sie eine Sitzung gestartet nicht haben, mit diesem Antrag einem neuen Sitzung wird erstellt. Wenn Sie das nächste Mal versuchen, sich anzumelden, können Sie sich anmelden, während die Sitzung erstellt wurde.

Sie haben die Möglichkeit, require_previous_session: false in Ihrer app/config/security.yml Datei zu setzen für eine vorherige Sitzung zu vermeiden suchen:

security: 
    firewalls: 
     main: 
      form_login: 
       require_previous_session: false 
Verwandte Themen