LoginSignup
3
2

More than 5 years have passed since last update.

FirebaseでDatabaseのルールがなぜかリセットされてしまうときの凡ミス

Last updated at Posted at 2019-02-22

現象

Vue.js+Firebaseで認証付きチャット | 基礎から学ぶ Vue.js を参考にVueとFirebaseを初めて触っていたのですが、
Databaseにルールを記載してもいつの間にか元に戻ってしまっていました。

解決

自分のプロジェクト内にあるdatabase.rules.jsonにルールを記載しましょう。

詳細

Vue.js+Firebaseで認証付きチャット | 基礎から学ぶ Vue.js の「Firebase のルールの定義」という章で、ログインしているユーザーであれば、チャットの読み書きができるようにするルールが紹介されておりました。

RealtimeDatabase
{
  "rules": {
    // デフォルトの読み書きはすべて拒否
    ".read": false,
    ".write": false,
    "message": {
      ".read": "auth != null", // 読み込みは認証が必要
      ".write": "auth != null" // 書き込みは認証が必要
    }
  }
}

して、こちらのルールをfirebaseのDatabaseに記述したところチャットがちゃんと動きました!∩( ・ω・)∩ばんじゃーい
と思ったのも束の間、他の作業をしていたらいつの間にかチャットがうまく動かんやんけ……と思って見直したところ、書いたはずのルールがリセットされているではありませんか。

RealtimeDatabase
{
  "rules": {
    ".read": false,
    ".write": false
  }
}

なんでや。

答えはいつも公式にある

データベース ルールを使ってみる  |  Firebase Realtime Database

注: Firebase CLI を使用してセキュリティ ルールをデプロイすると、Firebase コンソールにある既存のルールが、プロジェクト ディレクトリで定義したルールで上書きされます。そのため、Firebase コンソールでセキュリティ ルールを定義または編集する場合は、必ずプロジェクト ディレクトリで定義したルールも更新してください。

これよ~これ

プロジェクト内のルールも更新しよう

プロジェクト作成時にファイル名の指定などを特にしてなければ、database.rules.jsonがルールを定義しているファイルです。
そこにDatabaseに書いたルールと同じものを書いてデプロイすればちゃんと更新されます。
(つまりはFirebase consoleで定義したルールを、デプロイするたびに自ら初期化していたということですから、愚かのキワミですアッー!)

ちなルールを書いたファイルの場所はfirebase.jsonに記載してあります。

firebase.json
{
  "database": {
    "rules": "database.rules.json" ←ここです
  },
  省略・・・
}

おしまい

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2