Open yushi32 opened 4 months ago
onAuthStateChanged
関数は認証状態の変化を検知して更新されたuser
オブジェクトを受け取っていて、これをcurrentUser
ステートにセットしグローバルに管理している。linkWithPopup
関数で匿名ユーザーを永久ユーザーに変更するとonAuthStateChanged
関数が発火してuser
オブジェクトが更新される。currentUser
も更新され、モーダルで表示しているコンポーネントも再レンダリングされるはずだが、表示内容が変わらない。linkWithPopup
関数だとonAuthStateChanged
関数が発火しないという情報もあり。
onAuthStateChanged
関数のコールバック関数に以下を追加することで解決したかも。
const nextOrObserver = async (user) => {
if (!user) {
setLoading(false);
return;
}
// このif文を追加
if (!user.isAnonymous) {
setCurrentUser(user);
}
setLoading(true);
setCurrentUser(user);
setLoading(false);
};
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, nextOrObserver);
return unsubscribe;
}, []);
const nextOrObserver = async (user) => {
if (!user) {
setLoading(false);
return;
}
setLoading(true);
setCurrentUser(user);
setLoading(false);
};
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, nextOrObserver);
return unsubscribe;
}, []);
?_rsc=英数字5文字
ってなに??_rsc=英数字5文字
とは、React Server Component のレスポンスを取得するためにサーバーからクライアントにデータを非同期的に取得するためのリクエストらしい。currentUser
であり、useFirebaseAuth.js
には`'use client'をつけていないので、ここからのデータフェッチが行われていないことが原因の可能性はありそう。useFirebaseAuth.js
内で React Hooks を使用しているので RSC ではないと思われる。GuestUserAnnoucement
コンポーネントで呼び出しているはクライアントコンポーネントだし、src/home/page.js
にも'use client'
が記述されているのでこちらもクライアントコンポーネント。
users
テーブルにrole
カラムを追加role
カラムをguest
からgeneral
へ