はじめに
自分で開発したWebアプリにはCloud Firestoreを使っていたのですが、DBにアクセスできなくなってしまいました。
その解決法をご紹介します。
アクセスできなくなった際の状態
Firebaseの左側にあるプロジェクトショートカットのFiretore押下後、ルールタブを参照してみます。

どうやら16行目に書かれている日付の期限が切れているようです。

原因
原因は先ほど述べたように、日付の期限切れです。
Firestoreを最初に作成した際、「テストモード」を選んでいました。
この「テストモード」では、30日間の有効期限がついているため、それが切れてしまいDBにアクセス出来なかったようです。
解決策
1.日付を伸ばす(非推奨)
先ほどの画像(Firestoreのルール)の期限を決めている部分を未来へ変更することで一応の対処は可能です(以下の部分)。
match /{document=**} {
allow read, write: if request.time < timestamp.date(yyyy,mm, dd);
}
しかし、これでは誰もが読み書き・削除できる状態なのでリスクがあります。
また、期限が切れた際にはまた今回と同様のことが起こります。
2.匿名認証を取り入れる
このようにすると、Firebase Auth(認証機能)を通じたリクエストしかデータベースが受け付けなくなるため、外部からの不正なスクリプト実行やデータ改ざんを防ぐことができます。
また、期限で使えなくなることもありません。
①セキュリティからAuthenticationを選択(Firebase)
②匿名認証の有効化(Firebase)
③ルールの書き換え(Firebase)
Firestoreのルールの日付があった部分を以下のように書き換えます。
match /{document=**} {
allow read, write: if request.auth != null;
}
④フロント側に処理を加える
アプリ起動時に匿名ログインを完了させる処理を追加します。
認証が終わってから画面を表示させないと未ログイン扱いとなりエラーになってしまうので気をつける必要があります。
以下は実装例です。
import { useEffect } from 'react';
import { getAuth, signInAnonymously } from 'firebase/auth';
// Firebase初期化(authの取得)
const auth = getAuth();
function App() {
useEffect(() => {
// アプリが開いた瞬間に匿名ログインを実行する
signInAnonymously(auth)
.then(() => console.log("匿名ログイン成功!"))
.catch((error) => console.error("ログイン失敗:", error));
}, []);
return (
<div>
{/* 画面コード */}
</div>
);
}
export default App;
終わりに
突然DBが使えなかった時は焦りましたが、原因がわかって良かったです。
フロント側の処理はAIに上手いことやってもらいました。
同じ事象が起きた方のお役に立てれば幸いです。
また次回の記事でお会いしましょう!!


