Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Undocumented!? firebase
Search
Jumpei Takiyasu
March 08, 2019
Technology
0
180
Undocumented!? firebase
Jumpei Takiyasu
March 08, 2019
Tweet
Share
More Decks by Jumpei Takiyasu
See All by Jumpei Takiyasu
BIRのアーキテクチャと データ処理
juntaki
0
840
BIRのアーキテクチャと 技術選定
juntaki
0
610
ROSでSLAMラジコンをつくる
juntaki
0
3.1k
6足歩行ロボットをつくった
juntaki
0
550
GoでAPIサーバをはやくつくる
juntaki
26
12k
3Dプリンタと4足歩行プロトタイプ
juntaki
0
6.4k
アンケートの集計システムを作った
juntaki
0
3k
Goならわかる Linuxのメモリ管理
juntaki
13
6k
社内勉強会の管理ツール Sugoi Meetupをつくった
juntaki
0
710
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
5
46k
ネットワークだけ隔離されたコンテナ作成デモ / Kichijoji.pm36
tenforward
1
230
サーバー管理しないサーバーサービスManaged DevOps Pool
kkamegawa
0
130
自作Cコンパイラ 8時間の奮闘
soukouki
0
850
不動産売買取引におけるAIの可能性とプロダクトでのAI活用
zabio3
0
270
JEP 480: Structured Concurrency
aya_ebata
0
130
サプライチェーン攻撃に備える
ryunen344
0
290
Technical Writing Meetup vol.35
soracom
PRO
2
120
可視化により内部品質をあげるAIドキュメントリバース/20240910 Hiromitsu Akiba
shift_evolve
0
220
AI活用したくてもできなかった不動産SaaSの今とこれから
nealle
0
330
AIを活用した柔軟かつ効率的な社内リソース検索への取り組み
cygames
0
180
GC24 Recap: Interface Internals
task4233
0
140
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
363
22k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
23
1.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
The Language of Interfaces
destraynor
153
23k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
24
610
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
Clear Off the Table
cherdarchuk
91
320k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
166
48k
Rebuilding a faster, lazier Slack
samanthasiow
78
8.6k
Making the Leap to Tech Lead
cromwellryan
128
8.8k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Transcript
Undocumented!? Firebase Jumpei Takiyasu @juntaki M3, Inc.
name <- "Jumpei Takiyasu" company <- "M3, Inc." web <-
"https://juntaki.com" Me
Firebaseははまりどころ多め あんまりドキュメントや情報が無い
今回やりたかったこと エムスリー:ファイルをアップロード&サイトURLお知らせ クライアント: URLアクセス→アカウント作成→ファイルダウンロード 関係ない人:アカウント作成するも、ログイン画面から進めない ファイル送信時点ではアカウントがないので、次のようにした • メールアドレスにファイルを紐付ける • ファイルを送られてない人はそもそも入ることすらできない
Hostingでアクセス制限したい IPアドレス制限(QA環境) Auth通った人だけ →できない
AppEngine + Admin SDKで静的ファイル配信 IPアドレス制限 →ファイヤウォールルールで設定 Auth通った人だけ →CookieでTokenIDを渡して、Admin SDKで検証 オーバースペック感はある
※ここはGoで書きました
FirestoreのクエリがPermission denied 一覧は全件取得しておけば、権限があるやつだけくるだろ〜 →できない
セキュリティルールはフィルタではない 権限があるものだけヒットするようにクエリを出さないといけない
メール確認したのに、emailVerified == false • セキュリティルールでファイルのemailとアカウントの一致をチェック • emailVerified == trueも条件にせざるを得ない メール確認のURLを踏んでも、Permission
denied しかも、しばらくするとアクセスが通るという謎の現象
Firebaseにクエリを投げる前にGetIdToken(true)しましょう(強制再取得) Token取得時にどうだったのかが大事 GetIdToken() emailVerified ==false (2hours) メール確認 emailVerified ==false Firebase側の状態
フロントエンドの状態 emailVerified ==true Firestoreクエリ Token側がfalseだ から権限はない 時間 時間
Storageにアップロードしたファイルが壊れる アップロードは成功するし、サイズもあるのに、ファイルが壊れる
カスタムメタデータ名に”@”はダメ どこにも書いてない!(メールアドレスをキーにしたかった) →ハッシュ値にすることで回避
Storageのダウンロードログ残したい →できない Cloud functionsでもトリガは4つだけ、Cloud Audit Loggingも対象外 • アーカイブ • 削除
• 作成 • メタデータ変更
解決策:操作ログをDBに書く じゃあ、”log”ってCollection作って、JavaScrpitから書くようにして・・ →できない
“log”というコレクションは作れるが使えない 解決策:なんかそれ以外の名前にしましょう
まとめ いろいろハマったが、結果的に2日もかからずに新しいサービスができた (QA・デザイン込でも5人日程度) Firebaseは便利
Thank you! Jumpei Takiyasu @juntaki M3, Inc. https://juntaki.com