Firestoreのセキュリティルールで文字列の長さを制限することができます。悪意のあるユーザによりとても長い文字列が登録されてしまい、結果過大な請求が発生するのを防ぐためにも、文字列の長さを制限しておくのはおすすめです。
string.size()
文字列のstring.size()メソッドを使用することで文字列の長さを取得できます。これと大小比較を組み合わせてルールを作成します。 例えば、"text"フィールドを16文字以下に制限するには以下のように記述します。
allow create, update: if request.resource.data.text.size() <= 16
String.size()の使用例
例としてTODOアプリを考えます。入力はタスク名とステータス(実施状況)です。
データ構造はこのようになっています。
タスク名を必須かつ16文字以下という条件を、セキュリティルールで書くとこのようになります。
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /todos/{todo} { function validTodo(docData) { return docData.text.size() > 0 && docData.text.size() <= 16; } allow read: if true; allow create, update: if validTodo(request.resource.data); } } }
6文字のタスク名で登録してみます。
Firebaseのコンソールで確認すると登録されていることが分かります。
長いタスク名(18文字)で登録してみると、エラーになり、コンソールを確認すると登録されていないことが分かります。
以上でFirestoreのセキュリティルールで文字列の長さを制限することができました。