有没有办法获取重定向到登录网址的网址?
这是上下文,以便您知道我为什么问这个问题。我首先展示我正在使用的代码。这就是我注册安全提供程序的方式:
$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。
由于
答案 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的能力 特征。简而言之,它无法真正被信任。