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
240
Undocumented!? firebase
Jumpei Takiyasu
March 08, 2019
Tweet
Share
More Decks by Jumpei Takiyasu
See All by Jumpei Takiyasu
BIRのアーキテクチャと データ処理
juntaki
0
1k
BIRのアーキテクチャと 技術選定
juntaki
0
700
ROSでSLAMラジコンをつくる
juntaki
0
3.3k
6足歩行ロボットをつくった
juntaki
0
640
GoでAPIサーバをはやくつくる
juntaki
26
12k
3Dプリンタと4足歩行プロトタイプ
juntaki
0
6.5k
アンケートの集計システムを作った
juntaki
0
3.3k
Goならわかる Linuxのメモリ管理
juntaki
13
6.1k
社内勉強会の管理ツール Sugoi Meetupをつくった
juntaki
0
760
Other Decks in Technology
See All in Technology
開発組織のための セキュアコーディング研修の始め方
flatt_security
3
2.4k
Amazon S3 Tablesと外部分析基盤連携について / Amazon S3 Tables and External Data Analytics Platform
nttcom
0
140
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
220
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
130
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
19
8.1k
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
410
Developer Summit 2025 [14-D-1] Yuki Hattori
yuhattor
19
6.2k
オブザーバビリティの観点でみるAWS / AWS from observability perspective
ymotongpoo
8
1.5k
技術的負債解消の取り組みと専門チームのお話 #技術的負債_Findy
bengo4com
1
1.3k
(機械学習システムでも) SLO から始める信頼性構築 - ゆる SRE#9 2025/02/21
daigo0927
0
150
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
2
380
なぜ私は自分が使わないサービスを作るのか? / Why would I create a service that I would not use?
aiandrox
0
760
Featured
See All Featured
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Why Our Code Smells
bkeepers
PRO
336
57k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
How to train your dragon (web standard)
notwaldorf
91
5.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
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