【问题标题】:Is this code hidden for the client in sveltekit?此代码是否在 sveltekit 中为客户端隐藏?
【发布时间】:2021-12-31 14:13:38
【问题描述】:

api 密钥会不会对用户隐藏?

# $lib/config.js

import { initializeApp } from 'firebase/app';
import { getFirestore } from "firebase/firestore/lite";
        
        
const firebaseConfig = {
      apiKey: "my-key",
};
        
const app = initializeApp(firebaseConfig);
        
export const db = getFirestore(app);


#index.svelte

import {db} from "$lib/config"

db.get...and so on

尝试了解如何处理您希望隐藏在 sveltekit 中的内容,因为通常 js 如果需要通过源代码对用户可见。

【问题讨论】:

  • 这能回答你的问题吗? How to use dotenv in SvelteKit project?
  • 所有你想对用户隐藏的东西都必须在服务器端。如果 API 密钥用于客户端,则无法隐藏它们。
  • @t.niese 那么我该怎么做呢?如果我构建它并将应用程序添加到服务器,用户是否可以看到 config.js?
  • 我之前没用过这个firebase sdk,不过你可以查看浏览器的网络标签看看你的api key是否可见。
  • @ambiguous58 是的。我想它不会,但是当我看到这个 youtu.be/OTxIcU_2Qos 时,我不明白它是 js 是怎么回事。否则 apiKey 对用户可见。

标签: javascript svelte sveltekit


【解决方案1】:

您需要将index.svelte 文件分成两部分。公开和提供数据。

顺便说一句:您的代码建议不起作用,因为代码不会总是在服务器 (SSR) 上执行。您无法在浏览器中访问数据库。

index.json.js,始终在服务器上运行,您可以在服务器上验证用户并准备数据。 (阅读更多关于endpoints的信息)


import {db} from "$lib/config"

db.get...and so on

index.svelte,加载准备好的数据

<script context="module">
    /** @type {import('@sveltejs/kit').Load} */
    export async function load({ params, fetch, session, stuff }) {
        const url = `index.json`;
        const res = await fetch(url);

        if (res.ok) {
            return {
                props: {
                    article: await res.json()
                }
            };
        }

        return {
            status: res.status,
            error: new Error(`Could not load ${url}`)
        };
    }
</script>

【讨论】:

  • 谢谢。最佳答案。有人说:“客户端有这样的密钥很正常,所有对资源的访问都可以通过安全规则进行控制”。任何意见?我喜欢不必在服务器上隐藏 apiKey 但希望它安全的简单性。顺便说一句,我的代码有效。它与 Firestore 对话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多