脚本宝典收集整理的这篇文章主要介绍了php – Symfony2,验证后切换到HTTPS,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
如何仅对经过身份验证的用户设置force-HTTPS,并强制不对我的捆绑包中的所有控制器中未经身份验证的用户使用HTTPS?
再次 – 这不是关于禁用授权页面的HTTPS.
我想对经过身份验证和未经身份验证的用户使用所有相同的控制器,但强制登录的用户使用HTTPS,以及那些不使用HTTP的用户.在用户通过身份验证时,基本上为所有控制器添加HTTPS要求.
这个问题是Symfony 2特有的.我想用Symfony机制来做.我知道如何检测这个东西,但它会打破Twig链接. Symfony可以自动切换到HTTPS,我只想知道如何在每个用户角色的基础上进行,而不是基于每个控制器.
access_control: - { role: ROLE_USER,requires_channel: https } - { role: IS_AUTHENTICATED_ANONYMOUSLY,requires_channel: http }
在这种情况下,我们可以使用内核事件与请求侦听器一起破解:
namespace YourBundle\EventListener; use Symfony\component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpFoundation\redirectResponse; class RequestListener { public function onKernelRequest(GetResponseEvent $event) { $request = $event->getRequest(); // force ssl based on authentication if ($this->container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')) { if (!$request->isSecure()) { $request->server->set('HTTPS',true); $request->server->set('SERVER_PORT',443); $event->setResponse(new RedirectResponse($request->getUri())); } } else { if ($request->isSecure()) { $request->server->set('HTTPS',false); $request->server->set('SERVER_PORT',80); $event->setResponse(new RedirectResponse($request->getUri())); } } } }
myapp.request.listener: class: MyApp\MyBundle\EventListener\RequestListener tags: - { name: kernel.event_listener,event: kernel.request }
有关事件等的详细信息,请参阅Symfony Internals.
以上是脚本宝典为你收集整理的php – Symfony2,验证后切换到HTTPS全部内容,希望文章能够帮你解决php – Symfony2,验证后切换到HTTPS所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。