1

我正在尝试在我的 security.yml 中设置 2 个具有 2 个不同提供程序和编码器的防火墙,如下所示:

security:
    encoders:
        Devsign\UserBundle\Entity\AgentUser:
            algorithm: sha512
            iterations: 5000
            encode_as_base64: true
        Devsign\UserBundle\Entity\PressUser:
            algorithm: sha512
            iterations: 5000
            encode_as_base64: true

    providers:
        agent_secured_area:
            entity: {class: Devsign\UserBundle\Entity\AgentUser } # using a custom repository to login with username or email, details in AgentUserRepository.php

        press_secured_area:
            entity: {class: Devsign\UserBundle\Entity\PressUser, property: username }

    firewalls:
        agent_secured_area:
            pattern: /(it|en)/reserved/
            provider: agent_secured_area
            anonymous: ~
            form_login:
                check_path: /it/reserved/login-check
                login_path: /reserved/login
            logout:
                path:   /reserved/logout
                target: /
        press_secured_area:
            pattern: /(it|en)/press/
            provider: press_secured_area
            anonymous: ~
            form_login:
                check_path: /it/press/login-check
                login_path: /press/login
            logout:
                path:   /press/logout
                target: /

    access_control:
        agent_login:
            path: /reserved/login
            roles: IS_AUTHENTICATED_ANONYMOUSLY
        agent_register:
            path: /reserved/register
            roles: IS_AUTHENTICATED_ANONYMOUSLY
        agent_area:
            path: /(it|en)/reserved/.*
            roles: ROLE_AGENT
        press_login:
            path: /press/login
            roles: IS_AUTHENTICATED_ANONYMOUSLY
        press_register:
            path: /press/register
            roles: IS_AUTHENTICATED_ANONYMOUSLY
        press_area:
            path: /(it|en)/press/.*
            roles: ROLE_PRESS 

我也不例外,但是当我尝试登录 agent_secured_area 时,我总是得到:“提供的密码无效”。

我在控制器中使用此代码创建了第一个用户密码和盐:

$factory = $this->get('security.encoder_factory');
    $user = new \Devsign\UserBundle\Entity\AgentUser();

    $encoder = $factory->getEncoder($user);
    $salt = $user->getSalt();
    $password = $encoder->encodePassword('grab', $salt);
    die("pwd: $password - salt: $salt");

然后我用回显值填充数据库字段密码和盐。

有人可以发现错误吗?

更新 1

我在 config_dev.yml 中做了一些测试设置:

web_profiler:
    toolbar: true
    intercept_redirects: true
    verbose: true

1) 我尝试转到 /it/reserved/info 但它受到访问保护,因此我被正确重定向到 /it/reserved/login

2)我尝试从 /it/reserved/login 登录,将表单发布到 /it/reserved/login-check

3) 感谢 web_profile: intercepts_redirects: true 我可以在 /it/reserved/login-check 中看到调试工具栏,并且我已使用正确的角色进行了正确的身份验证:ROLE_AGENT。顺便说一下,在探查器的教义部分中,我看到了两个针对我的用户表的查询,第一个带有参数 username NULL 的查询,第二个带有正确用户名的查询。

4) 然后我被重定向到 /it/reserved/info ,由于某种原因,我看到一个针对我的用户表的单个查询,参数 username 为 NULL。事实上,在 /it/reserved/info 我不再经过身份验证。所以我再次被重定向到/it/reserved/login。

所以我认为问题在于参数用户名为空的查询,有人知道它来自哪里吗?也许是由于 security.yml 上的一些错误配置?

4

0 回答 0