やりたかったこと
unrealのアプリからREST APIでfirebaseのデータを活用しようとしたときに、 realtime database から security rules を適応した形で REST APIでデータ取得したかった。
問題
realtime databaseだとsecurity rules 無視して全部取得できてしまう。
*ちなみに、rest api で user 認証後にデータ取得する方法はこちらなどがあります。 (emailとpasswordでログインの例) firebase.google.com
結論
firestoreのほうならsecurity rulesかけたままデータ取得できた。
取得するための curl のコマンドを使用。 (まずはできることを確認するためにcurlがちょうど良かったので)
schedule(コレクション名)のuser_idが1のものを取得するためのcurlコマンド:
curl 'https://firestore.googleapis.com/v1/projects/[プロジェクトid([]はいらない。)]/databases/(default)/documents:runQuery?key=[特定のユーザーのidToken]' -X POST -H "Content-Type: application/json" -d '{"structuredQuery":{"where":{"fieldFilter":{"field":{"fieldPath":"user_id"},"op":"EQUAL","value":{"stringValue":"123"}}},"from":[{"collectionId":"schedule"}]}}'
security rules例:
rules_version = 'x'; service cloud.firestore { match /databases/{database}/documents { ... match /schedule/{scheduleID} { allow read: if resource.data.user_id == "123"; allow write: if request.resource.data.user_id == request.auth.uid; } ... } }
・firestoreのrunQueryメソッドを利用しております。
GETでなくてPOSTでqueryの結果取得してください。
(GETでうまく行かないなぁとしばらく悩んだ。。orz)
・GETでcollection取得する場合は、listというメソッドを使っている模様。
使えるparamsが一緒だった。最初、realtime data baseでつかえたlimitとか
startAtとか使えないなぁと悩んでいた。
*改行など除きたい場合は下記のものなどで削除してください。 html-css-javascript.com
参照: https://stackoverflow.com/questions/49723881/firebase-firestore-rest-api-starting-query