Silex安全提供商从登录路由获取引用url


Silex security provider getting referer url from login route

是否有办法获得重定向到登录url的url?

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

$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),
            ),
        )
));

请注意,这里我正在保护英语和法语url (/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');

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

谢谢

我认为你真正想要的是这样的东西: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