很长一段时间我使用Symfony 2.0版本并且我的自定义身份验证提供程序正常工作。现在我决定升级到最新版本。第一步是升级到2.1,然后是2.2等等。 但我在第一步到第2.1步时卡住了。升级成功完成,但用户身份验证不起作用。每次登录后我都会重定向回登录表单。
我完全按照文档创建了用户提供程序和身份验证提供程序: http://symfony.com/doc/2.0/cookbook/security/custom_authentication_provider.html http://symfony.com/doc/2.0/cookbook/security/custom_provider.html
我将每个版本更改为添加equatableInterface并将equals()更改为UserProvider中的isEqualTo()方法。
在AuthenticationProvider中,我将Factory配置移到了bundle类。
在2.1版中有许多与安全性相关的更改。 (https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md) 我编辑的每一项更改。
我的令牌持久存在于控制器中,如下所示:
$authenticatedToken = new UsernamePasswordToken($user, null, 'back_area', array($result->roles));
$request = $this->getRequest();
$session = $request->getSession();
$session->set('_security_back_area', $authenticatedToken->serialize());
$this->get('security.context')->setToken($authenticatedToken);
and security.yml:
providers:
users:
id: login_user_provider
back_area:
pattern: ^/admin
provider: users
form_login:
check_path: _security_check_back
login_path: _security_login_back
logout:
path: _security_logout_back
Mytarget: /admin/
的routing.yml
_security_login_back:
pattern: /a/login
defaults: { _controller: MyBackBundle:Default:login }
_security_check_back:
pattern: /a/login_check
_security_logout_back:
pattern: /admin/logout
在此持久化之后,如果我转储security.context,则存在持久令牌,但在页面重定向之后,令牌(在security.context中)为NULL。