是否有办法获得重定向到登录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://php.net/manual/en/reserved.variables.server.php将用户代理引用到的页的地址(如果有)当前页面。这是由用户代理设置的。并不是所有的用户代理都可以设置它,有些提供将HTTP_REFERER修改为特性。简而言之,它不能真正被信任。