我正在尝试在我的 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 上的一些错误配置?