2012-04-12 159 views
2

嘗試登錄時,Symfony2告訴我提供了錯誤的憑據。第二次嘗試。任何想法爲什麼會發生? 要重現此行爲,我必須註銷,清除Cookie,再次進入登錄頁面並重新登錄。Symfony2:在清除cookie後第一次嘗試登錄時不起作用

我正在使用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 /資源/配置/路由/ 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

嘗試添加相關代碼到你的問題,「登錄」 symfony中2是非常抽象的。 – ilanco 2012-04-23 09:42:03

+0

@ilanco:讓我知道你是否需要更多的代碼。我剛纔發現我使用的是一個非常老的FOSUserBundle版本(6cdd9c292afa219ef799893061eaae1fc400ae33) - 今天會嘗試更新... – stoefln 2012-04-23 10:01:48

+0

您是否可以包含顯示登錄路由的路由部分(如果有)? – 2012-04-26 14:32:37

回答

2

在我看來,這是預期的行爲,你啓用了匿名身份驗證:

  • 你要求你的應用程序的網址,而不會被記錄=>會話cookie與會話ID
  • 匿名令牌創建創建
  • 你明確的cookie =>沒有更多的會話ID,以確定您
  • 接下來的請求,沒有令牌附加到您的登錄請求......
+0

那麼我需要做些什麼才能擺脫這種行爲?對不起,我剛剛複製了大部分安全配置,我不知道每個LOC的含義:/ – stoefln 2012-04-27 15:30:10

+0

爲什麼需要在登錄頁面管理cookie刪除? – AlterPHP 2012-04-29 12:23:29

+0

其實,我不知道該怎麼做才能避免這種行爲... – AlterPHP 2012-04-29 12:23:53

1

我對symfony並不熟悉,但是,當身份驗證檢查查找有效的cookie時,我遇到了同樣的問題,但在檢查後創建了cookie - 因此導致它第二次通過,從來沒有第一。

+0

是的。顯然正在創建cookie,在執行檢查之後。 – desbest 2012-04-30 09:22:36

1

默認的Symfony需要一個會話必須在表格的提交之前存在

從文檔

# 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 

爲了

超過走到這一步,你可以設置「require_previous_session」 (默認爲true)爲false,如下所示:在「security.yml」中,如下所示: require_previous_session:false

你可以在以下鏈接 SecurityBundle Configuration ("security")

0

閱讀更多關於它的Symfony文檔我有這個問題,我解決它在這裏Symfony 2 「Your session has timed out or you have disabled cookies」答案如下。

@AlterPHP是正確的,你必須先登錄兩次,因爲第一次你得到這樣的錯誤:

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

當你沒有一個會議開始,這個請求新會話已創建。下次嘗試登錄時,會話已創建,您可以登錄。

你必須選擇require_previous_session: falseapp/config/security.yml文件中設置,以避免找以前的會話:

security: 
    firewalls: 
     main: 
      form_login: 
       require_previous_session: false 
相關問題