Silex安全提供程序从登录路由获取referer url

时间:2016-09-10 20:42:57

标签: php symfony silex

有没有办法获取重定向到登录网址的网址?

这是上下文,以便您知道我为什么问这个问题。我首先展示我正在使用的代码。这就是我注册安全提供程序的方式:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
        'client' => array(
            'pattern' => '^/(en|fr)/client',
            'form' => array('login_path' => "/fr/login", 'check_path' => "/fr/client/login_check"),
            'users' => function () use ($app) {
                return new UserProvider($app['pdoqueries']);
            },
            'logout' => array('logout_path' => '/logout', 'invalidate_session' => true),
            ),
        )
));

请注意,我正在保护英语和法语网址(/ en / client和/ fr / client)。我没有找到一种方法使login_path指向具有正确语言环境的正确登录URL,因此我将其硬编码到法语URL。

现在这是登录路线:

$app->get('/{_locale}/login', function(Request $request) use ($app, $arrConfig) {
    $referer = $request->headers->get('referer');
    error_log(__FILE__ . ": "  . __LINE__ . ":  " .  __FUNCTION__  ."     : "  . var_export($referer, true));
    return $app['twig']->render('auth/form.twig', array(
        'error'         => $app['security.last_error']($request),
        'last_username' => $app['session']->get('_security.last_username'),
        'title'         => 'Login',
        'assetsUrl'             => $arrConfig['assets_url']
    ));
})
->bind('login');

您可以看到我已经尝试从请求标头中获取引用。不幸的是,它不起作用。 我需要一种方法来获取用户尝试访问的URL以从中获取区域设置并在该区域设置中显示登录表单文本。此信息必须存储在某处,因为在成功登录后,用户将被重定向到该URL。

由于

1 个答案:

答案 0 :(得分:0)

我认为你真正追求的是这样的:https://stackoverflow.com/a/25651658/1741150

但是如果我误解了,这里有关于引用者的一些提示:

也许 SilexSecurityProvider 会像Symfony那样公开此设置:

firewalls:
    main:
        # ...
        form_login:
            # ...
            use_referer: true

(资料来源:http://symfony.com/doc/current/security/form_login.html#using-the-referring-url

如果它没有,你仍然可以尝试使用一个好的旧$_SERVER['HTTP_REFERER'],但请记住,不是每个客户都设置它:

  

将用户代理引用到的页面地址(如果有)   当前页面。这是由用户代理设置的。并非所有用户代理都会   设置这个,有些提供修改HTTP_REFERER的能力   特征。简而言之,它无法真正被信任。

http://php.net/manual/en/reserved.variables.server.php