Symfony登录没有形式,怪异的行为

时间:2015-08-27 17:49:19

标签: php security symfony

我是我项目的一个动作控制器(Sf 2.7.3),我自动为这样的用户自动化:

$providerKey = 'user_provider';
$token = new UsernamePasswordToken($user, null, $providerKey, $user->getRoles());
$this->get('security.token_storage')->setToken($token);

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

多数民众赞成似乎工作正常。在Symfony工具栏中出现:

  

以mail@example.com身份登录

     

已验证否

     

令牌课UsernamePasswordToken

我的security.yml:

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

    frontend:
        pattern:    ^/
        anonymous: ~
        http_basic: ~
        provider: user_provider
        form_login:
            login_path: user_login
            check_path: user_login_check
            use_referer: true
        logout:
            path:   user_logout
            target: /
        remember_me:
            key:      *****
            lifetime: 31536000


access_control:
    - { path: ^/private-zone/login,         roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/private-zone/login_check,   roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/private-zone/register,      roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/private-zone*,              roles: [ROLE_USER, ROLE_ADMIN] }

providers:
    user_provider:
        entity:
            class:        X\AccountBundle\Entity\User
            property:     email
            manager_name: ~
    in_memory:
        memory: ~
encoders:
    X\AccountBundle\Entity\User: { algorithm: sha512, iterations: 10 }

但是如果我进入/ private-zone路径,它会重定向到/ login(无限)。

如果我使用表单登录进行登录,一切正常,工具栏信息也一样。有人明白这个问题吗?

2 个答案:

答案 0 :(得分:1)

根据this$providerKey的{​​{1}}参数是防火墙的名称,因此将UsernamePasswordToken更改为$providerKey

答案 1 :(得分:0)

根据您的工具栏,您未经过身份验证。当您不向user / usertoken提供任何角色时,可能会发生这种情况。拥有令牌和拥有经过身份验证的令牌之间存在差异。

这可能是您的私有区域登录失败的原因:它需要用户或管理员角色,或者经过身份验证的无效令牌(或更高级别)。

确保'$ user-> getroles();'返回至少一个角色,并查看a)工具栏上的a)已验证为是和b)修复您的登录问题私有区