加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Symfony2,验证后切换到HTTPS

发布时间:2020-12-13 14:07:28 所属栏目:PHP教程 来源:网络整理
导读:我想强制用户使用HTTPS而不是HTTP,但只能在身份验证后使用.我发现的唯一选择是基于每个控制器/方法强制HTTPS.匿名用户应该只使用HTTP. 如何仅对经过身份验证的用户设置force-HTTPS,并强制不对我的捆绑包中的所有控制器中未经身份验证的用户使用HTTPS? 再次
我想强制用户使用HTTPS而不是HTTP,但只能在身份验证后使用.我发现的唯一选择是基于每个控制器/方法强制HTTPS.匿名用户应该只使用HTTP.

如何仅对经过身份验证的用户设置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 YourBundleEventListener;

use SymfonyComponentHttpKernelEventGetResponseEvent;
use SymfonyComponentHttpFoundationRedirectResponse;

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()));
            }
        }
    }
}

在服务的config.yml中定义你的监听器:

myapp.request.listener:
    class: MyAppMyBundleEventListenerRequestListener
    tags:
        - { name: kernel.event_listener,event: kernel.request }

有关事件等的详细信息,请参阅Symfony Internals.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读