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
140
Undocumented!? firebase
Jumpei Takiyasu
March 08, 2019
Tweet
Share
More Decks by Jumpei Takiyasu
See All by Jumpei Takiyasu
BIRのアーキテクチャと データ処理
juntaki
0
720
BIRのアーキテクチャと 技術選定
juntaki
0
530
ROSでSLAMラジコンをつくる
juntaki
0
2.9k
6足歩行ロボットをつくった
juntaki
0
460
GoでAPIサーバをはやくつくる
juntaki
26
11k
3Dプリンタと4足歩行プロトタイプ
juntaki
0
6.3k
アンケートの集計システムを作った
juntaki
0
2.8k
Goならわかる Linuxのメモリ管理
juntaki
13
5.9k
社内勉強会の管理ツール Sugoi Meetupをつくった
juntaki
0
650
Other Decks in Technology
See All in Technology
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
2
820
長期間TiDBを使ってきた話 @ 私たちはなぜNewSQLを使うのかTiDB選定5社が語る選定理由と活用LT / Experiences with TiDB Over Time
chibiegg
2
860
継続的な改善 x ⾮連続的な進化
sansantech
PRO
3
130
20240416_devopsdaystokyo
kzkmaeda
1
210
DevOpsDays History and my DevOps story
kawaguti
PRO
9
2.3k
Reducing Cross-Zone Egress at Spotify with Custom gRPC Load Balancing Recap
koh_naga
0
190
コンパウンドスタートアップのためのスケーラブルでセキュアなInfrastructure as Codeパイプラインを考える / Scalable and Secure Infrastructure as Code Pipeline for a Compound Startup
yuyatakeyama
3
4.6k
現代CSSフレームワークの内部実装とその仕組み
poteboy
8
3.5k
[PlatformCon 24] Platform Orchestrators: The Missing Middle of Internal Developer Platforms?
danielbryantuk
1
820
私が trocco を推す理由
__allllllllez__
1
190
EMとして2023年度に頑張ったこと / What we did well in FY2023 as a EM
pauli
1
150
コードを書く隙間を見つけて生きていく技術/Findy 思考の現在地
fujiwara3
27
5.8k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
41
12k
A better future with KSS
kneath
231
16k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
GraphQLとの向き合い方2022年版
quramy
31
12k
Rails Girls Zürich Keynote
gr2m
91
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
321
20k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
Git: the NoSQL Database
bkeepers
PRO
422
63k
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.4k
Adopting Sorbet at Scale
ufuk
67
8.6k
Optimising Largest Contentful Paint
csswizardry
7
2.3k
Into the Great Unknown - MozCon
thekraken
10
990
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