2012-04-12 166 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 
相关问题