TYMtwilight / tsugumon

地元企業と移住希望者とを継ぐ求人支援アプリケーション👔
https://tsugumon-tymtwilight.vercel.app/
1 stars 0 forks source link

🐛 企業ユーザーが「事業主」「職種」「住所」のデータを編集してもFirebaseに保存されない問題の解決 #360

Closed TYMtwilight closed 1 year ago

TYMtwilight commented 1 year ago

問題の内容

企業ユーザーが「事業主」「職種」「住所」のデータを編集しても、セキュリティルールに抵触して、Firebaseに保存されない問題が発生しています。

実行環境

使用機器;MacBook Air (Retina, 13-inch, 2019) OS:Mac OS Monterey バージョン12.6 ブラウザ:Chrome バージョン: 107.0.5304.121(Official Build) (x86_64)

再現手順

  1. 「事業主」「職種」「住所」が空欄のユーザーでログインし、企業ユーザーのプロフィール編集ページへ移動する

2.「事業主」「職種」「住所」の項目に入力し、「登録する」ボタンをクリックする

スクリーンショット 2022-12-01 1 50 31

3.プロフィール表示画面を確認すると、登録したはずの「事業主」「職種」「住所」が空欄となる不具合が発生している

スクリーンショット 2022-12-01 1 50 52

4.プロフィール表示画面でコンソールを確認すると

bundle.js:40510 Uncaught (in promise) FirebaseError: Missing or insufficient permissions.

と表示されている

スクリーンショット 2022-12-01 1 52 28
TYMtwilight commented 1 year ago

🔎分析結果

「事業主」「職種」「住所」のデータはFIrestoreのoptionコレクションのドキュメントのフィールドに格納されているため、これらの値が登録されないのは、optionコレクションのセキュリティルールに関係してくると予想。 optionコレクションのセキュリティルールは以下のとおりとなっており、ルールの記述自体におかしなところはありませんでした。

// optionコレクション
    match /option/{userId}{
        allow read: if request.auth != null;
      allow update, delete: if request.auth != null
        && request.auth.uid == request.resource.data.uid;
      allow create: if request.auth != null;
    }

つぎにFiresotoreのoptionコレクションを参照したところ、以下のとおり、エラーが起きているユーザーのドキュメントには「uid」フィールドが登録されていない事実が判明しました。

スクリーンショット 2022-12-01 18 23 48 スクリーンショット 2022-12-01 18 24 02

したがって、今回のエラーはコードの内容の不備によるものではなく、Firestoreのドキュメントの欠陥によるものだと思われます。

TYMtwilight commented 1 year ago

課題が達成されたため、イシューをクローズします😉