Symfony2的:登录不上的第一次尝试清除Cookie后工作 [英] Symfony2: login does not work on first try after clearing cookies

查看:158
本文介绍了Symfony2的:登录不上的第一次尝试清除Cookie后工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在尝试登录,Symfony2的告诉我,我提供了错误的凭据。第二次尝试的作品。任何想法,为什么会发生这种情况?
若要重现行为,我必须退出,清除Cookies,进入登录页面,一次又一次登录。

我使用FOSUserBundle。

config.yml:

 框架:
#esi:〜
秘密:asdfsadfasdf
#translator:{回退:EN}
字符集:UTF-8
路由器:{资源:%kernel.root_dir%/配置/ routing.yml中}
形式:真
csrf_protection:真
验证:{enable_annotations:真正}
模板:{引擎:['枝'],assets_version:V1.2} #assets_version:SomeVersionScheme
译者:{回退:德}会议:
    DEFAULT_LOCALE:德
    AUTO_START:假的
    终身1000000
...

security.yml:

 安全性:
EN codeRS:
    Symfony的\\分量\\安全\\核心\\用户\\用户名:明文role_hierarchy:
    ROLE_ADMIN:ROLE_USER
    ROLE_SUPER_ADMIN:[ROLE_USER,ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH]
供应商:
    fos_userbundle:
        ID:fos_user.user_manager防火墙:
    开发:
        模式:^ /(_(分析器| WDT)| CSS |图片| JS)/
        安全性:假的
    登录:
        模式:^ / $登录
        安全性:假的    上市:
        模式:^ / *。
        form_login:
            供应商:fos_userbundle
            check_path:/ login_check
            remember_me:真
        记住我:
            关键:aaasfasdfasdfsadfsadf
            寿命:1296000#15天第二
            路径:/
        匿名:真
        退出:真
访问控制:
     - {路径:^ /登录,角色:IS_AUTHENTICATED_ANONYMOUSLY}
     - {路径:^ /寄存器,角色:IS_AUTHENTICATED_ANONYMOUSLY}
    # - {路径:^ / _内部,作用:IS_AUTHENTICATED_ANONYMOUSLY,IP:127.0.0.1}
     - {路径:^ /事件/制作,角色:ROLE_USER}
    #...
ACL:
    连接:默认

的routing.yml:

  _imagine:
    资源:。
    类型:想象_指数:
    资源:@ AjadoEventHubBundle /控制器/ IndexController.php
    类型:注释fos_comment_api:
    类型:休息
    资源:@ FOSCommentBundle /资源/配置/ routing.yml中
    preFIX:/ APIfos_user_security:
    资源:@ FOSUserBundle /资源/配置/路由/ security.xml文件
...

@ FOSUserBundle /资源/配置/路由/ security.xml文件:
    

 <路线的xmlns =htt​​p://symfony.com/schema/routing
    XMLNS:XSI =htt​​p://www.w3.org/2001/XMLSchema-instance
    XSI:的schemaLocation =htt​​p://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd\">    <路线ID =fos_user_security_login模式=/登录>
        <默认键=_控制器> FOSUserBundle:安全:登录< /默认>
    < /路由>    <路线ID =fos_user_security_check模式=/ login_check>
        <默认键=_控制器> FOSUserBundle:安全:检查< /默认>
    < /路由>    <路线ID =fos_user_security_logout模式=/注销>
        <默认键=_控制器> FOSUserBundle:安全:注销< /默认>
    < /路由>< /路线>


解决方案

在我看来,这是预期的行为当你启用匿名身份验证:


  • 您请求您的应用程序网址,没有被记录=>的会话cookie与会话ID创建

  • 一个匿名令牌创建

  • 您清晰的cookie =>没有更多的会话ID,以确定您

  • 接下来的请求,没有令牌附加到您的登录请求......

When trying to log in, Symfony2 tells me that I provided the wrong credentials. Second try works. Any ideas why this could happen? To reproduce the behaviour, I have to logout, clear cookies, go to the login page again and log in again.

I am using 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/Resources/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>

解决方案

On my opinion, this is expected behaviour as you enabled anonymous authentication :

  • You request your app url, without being logged => a session cookie is created with your session ID
  • An anonymous token is created
  • You clear cookie => no more session id to identify you
  • Next request, no token is attached to your login request...

这篇关于Symfony2的:登录不上的第一次尝试清除Cookie后工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆