🔥
firebaseui-web-reactはおしまい!
firebaseui-web-reactライブラリを利用して認証機能を実装しようとすると、AuthUI instance is deleted!
といったエラーが出てしまいます。
このエラーは、firebaseui-web-react
を削除して、firebaseui
を使って解決することができます。
その手順は次のとおりです。
- firebaseui-web-reactを削除
yarn remove firebaseui-web-react
- firebaseuiを追加
yarn add firebaseui
- StyledFirebaseAuth.tsxを作成
StyledFirebaseAuth.tsx
import { useEffect, useRef, useState } from 'react';
import { onAuthStateChanged } from 'firebase/auth';
import * as firebaseui from 'firebaseui';
import 'firebaseui/dist/firebaseui.css';
interface Props {
// The Firebase UI Web UI Config object.
// See: https://github.com/firebase/firebaseui-web#configuration
uiConfig: firebaseui.auth.Config;
// Callback that will be passed the FirebaseUi instance before it is
// started. This allows access to certain configuration options such as
// disableAutoSignIn().
uiCallback?(ui: firebaseui.auth.AuthUI): void;
// The Firebase App auth instance to use.
firebaseAuth: any; // As firebaseui-web
className?: string;
}
const StyledFirebaseAuth = ({uiConfig, firebaseAuth, className, uiCallback}: Props) => {
const [userSignedIn, setUserSignedIn] = useState(false);
const elementRef = useRef(null);
useEffect(() => {
// Get or Create a firebaseUI instance.
const firebaseUiWidget = firebaseui.auth.AuthUI.getInstance() || new firebaseui.auth.AuthUI(firebaseAuth);
if (uiConfig.signInFlow === 'popup')
firebaseUiWidget.reset();
// We track the auth state to reset firebaseUi if the user signs out.
const unregisterAuthObserver = onAuthStateChanged(firebaseAuth, (user) => {
if (!user && userSignedIn)
firebaseUiWidget.reset();
setUserSignedIn(!!user);
});
// Trigger the callback if any was set.
if (uiCallback)
uiCallback(firebaseUiWidget);
// Render the firebaseUi Widget.
// @ts-ignore
firebaseUiWidget.start(elementRef.current, uiConfig);
return () => {
unregisterAuthObserver();
firebaseUiWidget.reset();
};
}, [firebaseui, uiConfig]);
return <div className={className} ref={elementRef} />;
};
export default StyledFirebaseAuth;
本当はバグが解消されるのが一番なのですが、firebaseui-web-react
はメンテナンスがされていないので、力技で解消しましょう。
また、本件はこのissueコメントをほぼ和訳しただけのものとなっています。
もしこの記事が役に立ったのならば、このissueコメントにGoodスタンプをお願いします。
Discussion