在主题组件中隐藏 API 令牌

我有一个主题组件,它在页面加载时向外部 API 发送请求以获取一些数据。但是,我用来获取此数据的 Bearer 令牌自然会加载到客户端可以访问的脚本中。有没有办法创建一个插件或类似的东西来隐藏此信息?

1 个赞

是的,您确实应该创建一个插件,并定义一个控制器方法来为您获取数据。

然后,从前端代码中调用控制器方法,该方法在服务器端注入承载令牌,第三方无法访问,并调用外部 API。

4 个赞

与其创建一个新的控制器来完成(这并不清楚理查德是否推荐),你还可以很容易地将其添加到现有的序列化器中,例如:

  add_to_serializer(:current_user, :my_stuff) do
    stuff = get_my_stuff_somehow
    stuff
  end

弄清楚有哪些可用的序列化器以及你想要哪一个,应该足够简单了(大多数都很容易猜测,但你可以在 app/serializers 中找到它们);在 GitHub - discourse/all-the-plugins 上搜索 add_to_serializer 应该能提供很多例子。并从 GitHub - discourse/discourse-plugin-skeleton: Template for Discourse plugins 开始。

即使你不知道 Ruby 或 Rails,上面的内容也应该能让你大致了解你需要做什么。如果不行,你可以在 Marketplace 中询问并说明预算。

我认为将外部依赖项挂钩到序列化程序是一个非常糟糕的主意 @pfaffman
如果外部服务出现故障或运行缓慢,那么您的论坛也将无法使用。

2 个赞

哦。好吧,真糟糕。这听起来确实是真的。:person_shrugging:

@attj,这是我更信任理查德所说而非我所说众多事情中的一件。

恐怕您需要做添加路由等工作,这需要更多的代码(可能只有几十行)。我认为 Discourse Category Home 🏠 是一个添加路由的例子。

4 个赞

我猜我写了一个插件,但需要将其放到 github 上才能包含在我的 app.yml 中。这自然也会暴露 token。有什么办法可以解决这个问题吗?

2 个赞

在安装后,只需从网站设置中读取令牌并将其输入即可。

3 个赞

很有道理。谢谢!

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.