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
170
Undocumented!? firebase
Jumpei Takiyasu
March 08, 2019
Tweet
Share
More Decks by Jumpei Takiyasu
See All by Jumpei Takiyasu
BIRのアーキテクチャと データ処理
juntaki
0
810
BIRのアーキテクチャと 技術選定
juntaki
0
580
ROSでSLAMラジコンをつくる
juntaki
0
3k
6足歩行ロボットをつくった
juntaki
0
520
GoでAPIサーバをはやくつくる
juntaki
26
12k
3Dプリンタと4足歩行プロトタイプ
juntaki
0
6.3k
アンケートの集計システムを作った
juntaki
0
3k
Goならわかる Linuxのメモリ管理
juntaki
13
6k
社内勉強会の管理ツール Sugoi Meetupをつくった
juntaki
0
680
Other Decks in Technology
See All in Technology
20240725 LLMによるDXのビジョンと、今何からやるべきか @Azure OpenAI Service Dev Day
nrryuya
3
1.2k
可視化プラットフォームGrafanaの基本と活用方法の全て
hamadakoji
0
230
AWSで”最小権限の原則”を実現するための考え方 /20240722-ssmjp-aws-least-privilege
opelab
10
4.3k
セキュリティ研修 Day1【MIXI 24新卒技術研修】
mixi_engineers
PRO
0
160
RAGのサービスをリリースして1年3ヶ月が経ちました
segavvy
4
910
公共領域から学ぶ クラウド移行についてエンジニアが意識していること
kawakawa2222
0
140
開発生産性をむしろ向上させる セキュリティパートナーの作り方 / Dev Productivity Con 2024
flatt_security
0
360
簡単に始めるSnowflakeの機械学習
nayuts
1
190
ABEMAにおけるLLMを用いたコンテンツベース推薦システム導入と効果検証
cyberagentdevelopers
PRO
1
720
【基調講演】変える、今ここから ― IoTとAIで紡ぐ未来
soracom
PRO
0
320
累計ダウンロード数1億8000万を超えるアプリケーションプラットフォームのレガシーシステム脱却とモダン化への道
kmitsuhashi
0
120
たくさん本を読んだけど 1年後には綺麗サッパリ!を乗り越えて 学習の鬼になるぞ👹
yum3
0
160
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
64
5.2k
Web Components: a chance to create the future
zenorocha
307
41k
It's Worth the Effort
3n
181
27k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
How to Ace a Technical Interview
jacobian
274
23k
WebSockets: Embracing the real-time Web
robhawkes
59
7.2k
Become a Pro
speakerdeck
PRO
15
4.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
39
47k
Building Effective Engineering Teams - LeadDev
addyosmani
47
2.2k
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
129
32k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
277
13k
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