很长一段时间我都在使用 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 中,我将工厂配置移至捆绑类。
在 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);
和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/
路由.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。