SecurityBundle 负责把 Security组件 整合到Symfony 框架中。在Symfony 3.3中我们对它进行了一些微小改进。
重命名的FirewallContext#getContext()
此方法名容易误导,因为它只是返回由 FirewallMapInterface::getListeners()
所返回的监听。因此我们决定不建议使用此方法,并把它重命名为 FirewallContext#getListeners()
。
改进的UserPasswordEncoderCommand
security:encode-password
命令十分有用,可在程序开发中加密用户的密码,或者对存储在 security.yml
文件中的用户进行加密。在Symfony 3.3中,这个命令更加智能,将显示你的程序中的可用的User类的完整列表,,因此你只需选中其中的一个,而不是输入User类的完整名称:
1 2 3 4 5 6 7 8 | $ ./bin/console security:encode-password
For which user class would you like to encode a password?
[0] App\Entity\User
[1] Custom\Class\Bcrypt\User
[2] Custom\Class\Pbkdf2\User
[3] Custom\Class\Test\User
[4] Symfony\Component\Security\Core\User\User |
不要normalize“in-memory用户"的用户名
把email这样的属性用作程序中用户的名称是常见的。然而,Symfony会对定义在 security.providers.in_memory.users
下面的键进行标准化(mnormalize),因此 foo-bar@gmail.com
会变成 foo_bar@gmail.com
进而导致验证失败。
在Symfony 3.3中我们改变了此种行为,那些键/用户名将不以任何方式进行标准化或是被修改。
强化版logout链接的自动生成
当使用类似 logout_path() 这种助手而不提供任何参数时,Symfony会为当前活跃的防火墙生成logout链接。在Symfony 3.3我们改进了其行为以便更好地解决一些特例。以下是它的流程:
- 尝试找出token的键 (除非它是一个anonymous匿名token);
- 若找到,尝试从key中获得listener。如果监听被找到,停止;
- 尝试从被注入的firewall key中寻找。如果监听被找到,停止;
- 尝试从被注入的firewall context寻找。如果监听被找到,停止。