Firebase 中间 AuthCredential:“TypeError:firebase.auth 不是函数”

问题描述 投票:0回答:1

我正在尝试在前端使用 Firebase 通过 SMS 验证用户,生成中间凭证,并将其与用户创建数据一起传递到后端进行验证。如果身份验证有效并且其他字段满足某些约束,我将创建用户。

但是,我似乎在初始化和导入 firebase 时遇到问题。当我尝试创建新用户时,它似乎正确生成了中间凭据并将其发送到后端。但是,当我尝试验证凭据时,我得到以下输出:

{   providerId: 'phone',   verificationCode: '111111',   verificationId: 'blah blah blah' }
Error registering user: TypeError: firebase.auth is not a function     at registerUser

userController.js:

import * as firebase from 'firebase/app';
import User from '../models/User.js';
import generateToken from '../utils/generateToken.js';
...

const registerUser = async (req, res) =\> {
const { username, password, other fields, credential } = req.body;
try {
    // validate other fields

    console.log(credential);
    const result = await firebase.auth().signInWithCredential(auth, credential);
    console.log(result);

    // create user
}

firebase.js:

const firebaseConfig = {
apiKey: "...",
authDomain: "....firebaseapp.com",
projectId: "...",
storageBucket: "....appspot.com",
messagingSenderId: "...",
appId: "...",
measurementId: "..."
};

import firebase from 'firebase/compat/app';
import "firebase/compat/auth";
firebase.initializeApp(firebaseConfig)
export const auth = firebase.auth();

我已将

"type": "module",
包含在我的后端的 package.json 文件中。

我知道我没有正确验证后端的凭据,但此时我真的只想能够运行 signInWithCredential 而不会出现错误。我将非常感谢任何帮助

我看到另一个 stackoverflow 线程说我应该尝试“firebase.deault.auth()”,但是 这会导致以下错误:“TypeError:无法读取未定义的属性(读取'auth')”

我最初使用的是导入语句,如“const express = require('express');”并遇到类似的错误,但现在我已将它们切换为这种样式“从‘express’导入快递;”并在我的后端文件中传播了适当的更改。但这似乎并没有解决任何问题。

到目前为止,我已经被这个问题困扰了好几天了。我已经尝试了很多我在网上看到的东西,但我实际上没有网络开发经验,所以我认为我可能只是犯了一些简单的错误。

reactjs node.js firebase firebase-authentication
1个回答
0
投票

Firebase 的 api 在 V9 中又变回了。

firebase.auth()
不再是获取 auth 对象的方法,而是这样完成的:

import { getAuth, signInWithCredential } from 'firebase/auth';
// ...
const result = await signInWithCredential(getAuth(), credential);

在您的 firebase.js 文件中,您似乎考虑到了这一点,因为您是从

firebase/compat
导入的。这允许您使用旧的 API,直到您可以将代码更新为新样式。如果您尚未准备好升级,您可以在
userController.js
文件中执行相同的操作:

import firebase from 'firebase/compat/app';
// ...
const result = await firebase.auth().signInWithCredential(credential);
© www.soinside.com 2019 - 2024. All rights reserved.