【问题标题】:Silex2: Security firewall and localeSilex2:安全防火墙和语言环境
【发布时间】:2017-09-11 12:23:18
【问题描述】:

如何将当前语言环境添加到 /user/login 或 /user/logout 等路径?控制器确实支持“{_locale}”占位符,但在安全模式中它会被报告为错误。

$app['security.firewalls'] = array(
    'login' => array(
        'pattern' => '^/user/login$',
    ),
    'secured_area' => array(
        'pattern' => '^.*$',
        'anonymous' => false,
        'remember_me' => array(),
        'form' => array(
           'login_path' => '/user/login',
           'check_path' => '/user/login_check',
        ),
       'logout' => array(
           'logout_path' => '/user/logout',
           'invalidate_session' => true,
       ),
    ),
 );

【问题讨论】:

  • 可能你需要像这样修复你的路线symfony.com/doc/current/translation/…
  • 安全组件不适用于 _locale 占位符。但它可以与命名路由一起使用,check this out
  • @mTorres:我在此​​链接中没有看到任何“命名路线”解决方案。只有一个会话解决方法,有人提到命名路由,但他没有解释命名路由如何解决安全模式问题。
  • @sakhunzai:多亏了神奇的 {_locale} 占位符,这些路线已经开始工作了。问题在于安全组件和本地化登录路径的重定向。
  • 据我了解,您必须自己注册 login_path、check_path 和 logout_path 而不是relaying on the SecurityServiceProvider。你必须name these routes(比如$app->match('/{_locale}/user/login', ...)->bind('login'),然后在你的安全配置中使用路由名称而不是路由路径(login_path => 'login')。我自己没有尝试过,所以我只是指向一个可能的解决方案...

标签: symfony silex


【解决方案1】:

解决方案是在“login_path”中使用路由名称(控制器绑定),而不是完整路径。

$app->get('/{_locale}/user/login', function(Request $request) use ($app) {
    return $app['twig']->render('login.html.twig', array(
        'error'         => $app['security.last_error']($request),
    ));
})->bind('login');


$app['security.firewalls'] = array(
    'login' => array(
        'pattern' => '^/(de|en|fr|es)/user/login$',
    ),
    'main' => array(
        'pattern' => '^.*$',
        'anonymous' => false,
        'remember_me' => array(),
        'form' => array(
        'login_path' => 'login',
        'check_path' => '/user/login_check',
        'post_only' => true,
        'with_csrf' => true,
        'default_target_path' => 'homepage'
    ),
    'logout' => array(
        'logout_path' => '/user/logout',
        'invalidate_session' => true,
    )
);

【讨论】:

  • 你好,我有同样的问题,但我的/login_check 有问题:当我设置了默认语言环境时没问题(我的网址看起来像这样/url)但是当我改变我的语言(我的网址看起来像这样/locale/url)它不起作用。当我尝试连接时,我的登录页面正常,如果我的网址是 /login,但不是 /locale/login,我在页面 /locale/login-check 上出现 404 错误......有什么想法吗?
  • “check_path”(登录表单操作)不需要语言环境。
  • 我提出了一个问题来解释我的问题,如果你有时间的话:stackoverflow.com/questions/49236815/…
猜你喜欢
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 2022-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多