getAuth() 在不同路径中的问题 - SvelteKit

Posted

技术标签:

【中文标题】getAuth() 在不同路径中的问题 - SvelteKit【英文标题】:Problem with getAuth() in a different route - SvelteKit 【发布时间】:2022-01-22 23:21:04 【问题描述】:

我正在尝试在 SvelteKit 中设置 Firebase 电子邮件/密码身份验证。在__layout.svelte 中,我初始化了我的 Firebase 应用:

<script lang="ts">
    import  onMount  from 'svelte';
    import  initializeApp  from 'firebase/app';

    onMount(() => 
        // Your web app's Firebase configuration
        const firebaseConfig = 
            apiKey: '***',
            authDomain: '***.firebaseapp.com',
            projectId: '***',
            storageBucket: '***.appspot.com',
            messagingSenderId: '***',
            appId: '***'
        ;

        // Initialize Firebase
        const app = initializeApp(firebaseConfig);
    );
</script>

对于我的登录/注册路线,我需要致电getAuth(),但无论何时我都会收到错误消息:

<script lang="ts">
    import  onMount  from 'svelte';
    import  getAuth, connectAuthEmulator  from 'firebase/auth';

    onMount(() => 
        const auth = getAuth(); //**ERROR HERE**
        connectAuthEmulator(auth, 'http://localhost:9099');
    );
</script>

我得到的错误是:

Firebase:没有创建 Firebase 应用“[DEFAULT]” - 调用 Firebase App.initializeApp()

我认为这是因为我需要在 getAuth() 函数内从 __layout.svelte 传递 app,但我不知道如何将 app 导出到我的登录路径。

【问题讨论】:

【参考方案1】:

我怀疑您遇到了异步问题...

文件:Auth.svelte

<script lang="ts">
    import  onMount  from 'svelte';
    import  initializeApp  from 'firebase/app';
    import  getAuth, connectAuthEmulator  from 'firebase/auth';

    onMount(async () => 
        const firebaseConfig = 
            apiKey: '***',
            authDomain: '***.firebaseapp.com',
            projectId: '***',
            storageBucket: '***.appspot.com',
            messagingSenderId: '***',
            appId: '***'
        ;

        // Initialize Firebase
        const app = await initializeApp(firebaseConfig);
    
        const auth = getAuth(); // This should work... 
        connectAuthEmulator(auth, 'http://localhost:9099');
    );
</script>

在 __layout.svelte 中:

<script>
    import Auth from "$lib/Auth.svelte";
</script>

<Auth />

这样可以吗?

【讨论】:

以上是关于getAuth() 在不同路径中的问题 - SvelteKit的主要内容,如果未能解决你的问题,请参考以下文章

SIMD 架构与 SVE2 的演进

熊猫:SettingWithCopyWarning [重复]

删除firebase中的auth用户反应本机

存储在数组中的索引路径表现不同

用户代理信息检测.js

如何避免使用自动工具重新编译不同路径中的不同目标?