- Symfony 2.1.3-dev
- SonataUserBundle
- SonataAdminBundle
- JMSI18nRoutingBundle
默认情况下,语言是法语,但我启用了“en”
我安装了这个捆绑包,大多数事情都很好。
但我想做以下事情:
- 用户 XXX (SonataUserBundle) 在“locale”字段中具有值“en”
- 当该用户登录时,我想以英文显示页面。
- 用户不必手动切换。
我认为这应该在认证过程中完成。
问题是 SonataUserBundle(基于 FOSUser)不进行身份验证(见这里)
所以我尝试这样做,但肯定有一些配置问题。
将 wsse_secured 应用于整个站点时:
wsse_secured:
pattern: ^/
wsse: true
我收到以下错误:在 SecurityContext 中找不到令牌。
将匿名添加到我的 config.yml 时:
firewalls:
....
main:
pattern: ^/
wsse: true
anonymous: true
我可以访问主页,但是在尝试登录时出现此错误: 您必须在安全防火墙配置中使用 form_login 配置要由防火墙处理的检查路径。
为 FOS 添加检查路径时,它可以工作,但系统不能与我的 wsse-provider 一起工作(我在 WsseProvider.php 中添加了代码让我知道)
所以我的问题是:我怎样才能得到这个 WSSE 身份验证的工作。我严格按照文档中的指示进行操作。
编辑 :
我可能通过在自己的包中实现 wsse 安全文件而犯了错误。现在我把它移到奏鸣曲用户包,我得到以下错误:
ErrorException:可捕获的致命错误:传递给 Application\Sonata\UserBundle\Security\Authentication\Provider\WsseProvider::__construct() 的参数 1 必须实现接口 Symfony\Component\Security\Core\User\UserProviderInterface,给定字符串,在..中调用\app\cache\dev\appDevDebugProjectContainer.php 在第 4413 行并在 ..\src\Application\Sonata\UserBundle\Security\Authentication\Provider\WsseProvider.php 第 17 行中定义
我在 WsseProvider.php 中的 UserProviderInterface 有什么问题:
<?php
namespace Application\Sonata\UserBundle\Security\Authentication\Provider;
use Symfony\Component\Security\Core\Authentication\Provider\AuthenticationProviderInterface;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\Exception\NonceExpiredException;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Application\Sonata\UserBundle\Security\Authentication\Token\WsseUserToken;
class WsseProvider implements AuthenticationProviderInterface
{
private $userProvider;
private $cacheDir;
public function __construct(UserProviderInterface $userProvider, $cacheDir)
{
$this->userProvider = $userProvider;
$this->cacheDir = $cacheDir;
}
...