首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何发送来自SvelteKit应用程序的安全API请求,而无需在客户端显示API密钥?

我如何发送来自SvelteKit应用程序的安全API请求,而无需在客户端显示API密钥?
EN

Stack Overflow用户
提问于 2021-05-17 10:56:10
回答 1查看 4.8K关注 0票数 10

我正在使用Supabase开发一个新的Sveltekit应用程序,与此模板一起使用

目前,我正在客户端传递Supabase键,如下所示:

代码语言:javascript
运行
复制
const supabase = createClient(
  import.meta.env.VITE_SUPABASE_URL,
  import.meta.env.VITE_SUPABASE_ANON_KEY
)

我可以创建一个安全的后端/API的最简单方法是什么,这样应用程序就可以从Supabase获取内容,而无需在客户端显示Supabase键?

在Sveltekit中是否有任何功能可以让我做到这一点?还是我需要集成像Rails这样的后端?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-18 02:05:03

SvelteKit在两个主要地方支持服务器端代码:

浏览器将永远无法访问这些代码;只有结果。而且,任何网络调用对客户端都是不可见的,因为它们都发生在服务器上(对于在URL中嵌入API密钥的情况)。每个API的locals属性是与所有服务器端部分共享敏感数据(如API键)的好地方。

一般建议使用本地端点代理外部API调用:

  1. 从SvelteKit中获取一个本地SvelteKit页面端点(而不是直接调用外部API,比如Supabase )。您可以从页面上的两个不同位置获取端点:
    • load() in <script context="module"> (允许在发送/呈现页面之前从服务器端调用API)
    • <script>

  2. 在单例中初始化外部API。
  3. 从端点调用外部API并将结果返回到页面。

备注:

  • SvelteKit端点是无服务器lambda函数的推广。(见NetlifyAWS口味)
  • 端点/钩子中使用的任何NPM模块必须是devDependencies。
  • 建议使用fetch() (例如,vs axios ),特别是在load()中。load()提供了一个特殊版本的fetch(),它缓存来自服务器端的调用,以便客户端可以重用结果。
  • 步骤2主要是支持像Netlify这样的无服务器环境。
票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67568323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档