Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Undocumented!? firebase

Undocumented!? firebase

De059f612e2f68589831e4bde0f15c83?s=128

Jumpei Takiyasu

March 08, 2019
Tweet

Transcript

  1. Undocumented!? Firebase Jumpei Takiyasu @juntaki M3, Inc.

  2. name <- "Jumpei Takiyasu" company <- "M3, Inc." web <-

    "https://juntaki.com" Me
  3. Firebaseははまりどころ多め あんまりドキュメントや情報が無い

  4. 今回やりたかったこと エムスリー:ファイルをアップロード&サイトURLお知らせ クライアント: URLアクセス→アカウント作成→ファイルダウンロード 関係ない人:アカウント作成するも、ログイン画面から進めない ファイル送信時点ではアカウントがないので、次のようにした • メールアドレスにファイルを紐付ける • ファイルを送られてない人はそもそも入ることすらできない

  5. Hostingでアクセス制限したい IPアドレス制限(QA環境) Auth通った人だけ →できない

  6. AppEngine + Admin SDKで静的ファイル配信 IPアドレス制限 →ファイヤウォールルールで設定 Auth通った人だけ →CookieでTokenIDを渡して、Admin SDKで検証 オーバースペック感はある

    ※ここはGoで書きました
  7. FirestoreのクエリがPermission denied 一覧は全件取得しておけば、権限があるやつだけくるだろ〜 →できない

  8. セキュリティルールはフィルタではない 権限があるものだけヒットするようにクエリを出さないといけない

  9. メール確認したのに、emailVerified == false • セキュリティルールでファイルのemailとアカウントの一致をチェック • emailVerified == trueも条件にせざるを得ない メール確認のURLを踏んでも、Permission

    denied しかも、しばらくするとアクセスが通るという謎の現象
  10. Firebaseにクエリを投げる前にGetIdToken(true)しましょう(強制再取得) Token取得時にどうだったのかが大事 GetIdToken() emailVerified ==false (2hours) メール確認 emailVerified ==false Firebase側の状態

    フロントエンドの状態 emailVerified ==true Firestoreクエリ Token側がfalseだ から権限はない 時間 時間
  11. Storageにアップロードしたファイルが壊れる アップロードは成功するし、サイズもあるのに、ファイルが壊れる

  12. カスタムメタデータ名に”@”はダメ どこにも書いてない!(メールアドレスをキーにしたかった) →ハッシュ値にすることで回避

  13. Storageのダウンロードログ残したい →できない Cloud functionsでもトリガは4つだけ、Cloud Audit Loggingも対象外 • アーカイブ • 削除

    • 作成 • メタデータ変更
  14. 解決策:操作ログをDBに書く じゃあ、”log”ってCollection作って、JavaScrpitから書くようにして・・ →できない

  15. “log”というコレクションは作れるが使えない 解決策:なんかそれ以外の名前にしましょう

  16. まとめ いろいろハマったが、結果的に2日もかからずに新しいサービスができた (QA・デザイン込でも5人日程度) Firebaseは便利

  17. Thank you! Jumpei Takiyasu @juntaki M3, Inc. https://juntaki.com