Firebase UI:updateCurrentUser 失败:第一个参数 "user" 必须是 Firebase User 的实例或 null

Firebase UI: updateCurrentUser failed: First argument "user" must be an instance of Firebase User or null

我最近更新到firebase 8,相关的deps包括firebaseui 4.8.1(我试过几个版本,他们都给我这个错误)。它加载了一个登录框,但是在尝试输入凭据或创建新用户时,出现此错误:

updateCurrentUser failed: First argument "user" must be an instance of Firebase User or null.

如何恢复授权功能?

firebase.js

import firebase from 'firebase/firebase';
import '@firebase/firestore';
import { FIREBASE_CONFIG } from '../keys';

const config = FIREBASE_CONFIG;

export const firebaseApp = firebase.initializeApp(config);
export const db = firebaseApp.firestore();

/store/index.js(缩写)

import firebase from 'firebase/firebase';
import * as firebaseui from 'firebaseui';
import '@firebase/firestore';

// This is our firebaseui configuration object
const uiConfig = ({
    signInSuccessUrl: '',
    signInOptions: [
        firebase.auth.EmailAuthProvider.PROVIDER_ID,
    ],
    callbacks: {
        signInSuccessWithAuthResult: authResult => {
            store.dispatch(login(authResult));
        },
    },
});

// This sets up firebaseui
const ui = new firebaseui.auth.AuthUI(firebase.auth());

// This adds firebaseui to the page
export const startFirebaseUI = elementId => {
    ui.start(elementId, uiConfig);
};

package.json

    "firebase": "^8.8.0"
    "firebaseui": "^4.8.1",

我已经尝试过这些讨论中建议的解决方案,但它们对我不起作用。 https://github.com/firebase/firebaseui-web/issues/536 https://github.com/firebase/firebaseui-web/issues/776

我也在控制台中看到了看起来像是有效身份验证响应的内容。这是 verifyPassword 响应:

{
  "kind": "identitytoolkit#VerifyPasswordResponse",
  "localId": "VgZWszYv8cYDJLQsIr3YzwcZJ4s1",
  "email": "user@gmail.com",
  "displayName": "My User",
  "idToken": "<<a_long_token>>",
  "registered": true,
  "refreshToken": "<<another_token>>",
  "expiresIn": "3600"
}

这是 getAccountInfo 响应:

{
  "kind": "identitytoolkit#GetAccountInfoResponse",
  "users": [
    {
      "localId": "VgZWszYv8cYDJLQsIr3YzwcZJ4s1",
      "email": "user@gmail.com",
      "displayName": "Me",
      "passwordHash": "<<a hash>>",
      "emailVerified": false,
      "passwordUpdatedAt": 1561313504412,
      "providerUserInfo": [
        {
          "providerId": "password",
          "displayName": "Me",
          "federatedId": "user@gmail.com",
          "email": "user@gmail.com",
          "rawId": "user@gmail.com"
        }
      ],
      "validSince": "1561313504",
      "lastLoginAt": "1627418219738",
      "createdAt": "1561313504412",
      "lastRefreshAt": "2021-07-27T20:36:59.738Z"
    }
  ]
}

尝试this

此解决方法是在项目的 packages.json:

中列出 firebaseui
"dependencies": {
    "firebaseui": "file:../../../firebaseui-web",
}

然后从 firebaseui 的 node_modules 目录导入 firebase 模块:

import firebase from "firebaseui/node_modules/firebase/app";
import "firebaseui/node_modules/firebase/functions";
import * as firebaseui from "firebaseui";
import "firebaseui/dist/firebaseui.css";

此包与 Firebase 8 不兼容。转储它并使用本机代码。此处建议:https://gist.github.com/CodingDoug/c0f782ad2e7e91933f8b5ffc53af55ad