Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Undocumented!? firebase
Search
Jumpei Takiyasu
March 08, 2019
Technology
340
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Undocumented!? firebase
Jumpei Takiyasu
March 08, 2019
More Decks by Jumpei Takiyasu
See All by Jumpei Takiyasu
BIRのアーキテクチャと データ処理
juntaki
0
1.6k
BIRのアーキテクチャと 技術選定
juntaki
0
920
ROSでSLAMラジコンをつくる
juntaki
0
3.9k
6足歩行ロボットをつくった
juntaki
0
800
GoでAPIサーバをはやくつくる
juntaki
26
13k
3Dプリンタと4足歩行プロトタイプ
juntaki
0
6.8k
アンケートの集計システムを作った
juntaki
0
4k
Goならわかる Linuxのメモリ管理
juntaki
13
6.3k
社内勉強会の管理ツール Sugoi Meetupをつくった
juntaki
0
850
Other Decks in Technology
See All in Technology
アカウント統制の健康診断
kenichinakamura
1
120
macOS Golden Gate 時代のMac管理
tategami
0
120
AI駆動開発における開発環境のセキュリティの考え方
yamahiro
0
300
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
330
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
180
Let's Change Our World—Again
snoozer05
PRO
4
320
ソフトウェア ファクトリー - 再現性のあるソフトウェアの工場づくり / Software factory
iktakahiro
7
5.3k
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
210
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
170
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
220
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
400
Metadata - Section 2: Simple Metadata & Meta Tags
mohab1
0
110
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
560
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
The SEO Collaboration Effect
kristinabergwall1
1
600
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Typedesign – Prime Four
hannesfritz
42
3.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
500
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
850
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