禁用特定的Symfony路由

3
长话短说:我正在为我的公司搭建一个私有Packagist站点,我需要禁用用户注册 [用户由Chef创建],同时仍然允许Github OAuth连接。
我通过在routing.yml的路由中添加以下不可满足条件来禁用了一般的注册页面:
fos_user_register:
    resource: '@FOSUserBundle/Resources/config/routing/registration.xml'
    prefix: /register
    condition: "1 == 0"

然而,我发现如果您尝试在未连接现有帐户的情况下使用Github登录,则会出现第二个注册表单,位于/connect/registration下,并由以下路由控制:
hwi_oauth_connect:
    resource: '@HWIOAuthBundle/Resources/config/routing/connect.xml'
    prefix:   /connect

routing.yml 中,以及:
<route id="hwi_oauth_connect_registration" path="/registration/{key}">
    <default key="_controller">HWIOAuthBundle:Connect:registration</default>
</route>

这位用户想知道如何在不修改vendor文件夹中的connect.xml文件的情况下,仅禁用/connect/registration

解决方案是?

1个回答

5

复制文件'@HWIOAuthBundle/Resources/config/routing/connect.xml'的内容,并将其粘贴到新的app/config/routing_hwi_connect.xml中。

通过在新创建的文件中设置自定义检查来禁用路由:

<route id="hwi_oauth_connect_registration" path="/registration/{key}">
    <default key="_controller">HWIOAuthBundle:Connect:registration</default>
    <condition>1 == 0</condition>
</route>

在你的routing.yml中,将hwi_oauth_connect更改为:
hwi_oauth_connect:
    resource: "routing_hwi_connect.xml"
    prefix:   /connect

当有人试图访问它时,应返回404

此外,肯定有更好的方法来允许/限制路由,也许可以通过创建预注册方法来实现,然后查看SecurityBundle配置,您可以轻松地做些好事情。


1
如果我删除路由,应用程序会变得愤怒并返回500错误,但是在路由中添加<condition>1 == 0</condition>会给出更友好的404。除此之外,我考虑使用基于这个的静态文件,其中包含“不要那样做,而是这样”的信息,而不是使用1 == 0条件。 - Sammitch
当然,这个路由肯定被许多控制器和模板用于路由生成,我会快速编辑以添加您的条件(有点奇怪但很有用!)。作为404的替代方案,该模板可能是一个不错的选择。 - chalasr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接