現象
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に記述したところチャットがちゃんと動きました!∩( ・ω・)∩ばんじゃーい
と思ったのも束の間、他の作業をしていたらいつの間にかチャットがうまく動かんやんけ……と思って見直したところ、書いたはずのルールがリセットされているではありませんか。
{
"rules": {
".read": false,
".write": false
}
}
なんでや。
答えはいつも公式にある
データベース ルールを使ってみる | Firebase Realtime Database
注: Firebase CLI を使用してセキュリティ ルールをデプロイすると、Firebase コンソールにある既存のルールが、プロジェクト ディレクトリで定義したルールで上書きされます。そのため、Firebase コンソールでセキュリティ ルールを定義または編集する場合は、必ずプロジェクト ディレクトリで定義したルールも更新してください。
これよ~これ
プロジェクト内のルールも更新しよう
プロジェクト作成時にファイル名の指定などを特にしてなければ、database.rules.json
がルールを定義しているファイルです。
そこにDatabaseに書いたルールと同じものを書いてデプロイすればちゃんと更新されます。
(つまりはFirebase consoleで定義したルールを、デプロイするたびに自ら初期化していたということですから、愚かのキワミですアッー!)
ちなルールを書いたファイルの場所はfirebase.json
に記載してあります。
{
"database": {
"rules": "database.rules.json" ←ここです
},
省略・・・
}
おしまい