后端代码

您好,

我正在尝试寻找一种在后端执行某些代码的方法。

最终目标是调用 Maxmind API,并将来自魁北克以外的用户重定向到另一个站点。

我找到了这篇帖子,并且我理解要做到这一点,我将不得不使用自托管的 Discourse。

在专业版计划上是否有办法实现我想要做的事情?

祝好,

Julien

抱歉,我不知道答案,但你应该三思而后行。IP 地理位置非常不可靠。

您需要为此编写一个插件。请参阅 开发 Discourse 插件 - 第一部分 - 创建一个基本插件

无需调用 API,因为 Discourse 自带 MaxMind 集成,您可以直接从插件中调用 DiscourseIpInfo.get(ip)

如果您使用我们的托管服务,请联系我们的支持团队。我们可以在我们的企业计划中为您提供自定义插件的帮助。

3 个赞

“> 您需要为此编写一个插件。请参阅 Developing Discourse Plugins - Part 1 - Create a basic plugin

但我可以在 SaaS 版本的 Discourse(使用 Pro 计划)中使用该插件吗?

“> 无需 API 调用,因为 Discourse 自带 MaxMind 集成,您只需从插件中调用 DiscourseIpInfo.get(ip) 即可。

这是否足够精确,可以仅定位加拿大魁北克省的用户?我发现的大多数 GeoIP 服务都具有国家精度,但无法定位加拿大的特定省份。

“> 如果您使用我们的托管服务,请联系我们的支持团队。我们可以在企业计划中为您提供自定义插件的帮助。

那么标准计划不可行吗?我猜企业计划的价格至少是 Pro 计划的 3 倍。”

很难说,这是我发现的关于我的IP的信息:

=> {:country=>"United States",
 :country_code=>"US",
 :region=>"Tennessee",
 :city=>"Nashville",
 :latitude=>36.1315,
 :longitude=>-86.8019,
 :location=>"Nashville, Tennessee, United States",
 :geoname_ids=>[6255149, 6252001, 4644585, 4662168],
 :asn=>7922,
 :organization=>"COMCAST-7922"}

有很多方法可能导致误报或漏报。您最好的选择是采用其他解决方案来解决您通过重定向来解决的问题。

这看起来足够精确了,但许多 GeoIP 服务对来自美国的 IP 比对来自加拿大的 IP 更精确。

它不必 100% 正确或错误,这是一种设置第一道防线的方式,因为该服务仅提供给魁北克省的人们。

1 个赞

与其进行完全重定向,不如使用主题组件,例如,如果您想重定向法语用户。它也许可以使用 Local 在登录屏幕上为法语用户弹出首选站点。

1 个赞

我建议您只需包含一个用户自定义字段,上面写着“我在魁北克”,用户在注册时必须勾选该字段。

如果您想要一个插件,我或许可以帮忙。

1 个赞

我欢迎为 Locations 插件提交一个 PR(作为站点设置),以自动确定用户的位置并将其设置在他们的个人资料中,在这种模式下,个人资料可以是只读的(另一个设置),以防止用户自行更改(但可以由管理员根据请求进行更改)。

然后,作为奖励,您将能够在一张地图上看到所有人 :slight_smile:

您可以将我们的地理封锁插件中的逻辑反转过来,而不是阻止某些区域,您可以阻止除某些区域之外的所有区域。这应该不难——能做到的人将获得额外加分,只需编辑一个字符即可。
提示:第 37 行!

或者您可以在 Professional 计划或更高级别上与 communiteq 托管。在这种情况下,我们甚至会为您扩展插件以满足您的用例。

2 个赞