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
Bringing Firebase Admin SDK to your server - Fi...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Henry Lim
October 07, 2018
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Bringing Firebase Admin SDK to your server - Firebase Dev Day Thailand 2018
Henry Lim
October 07, 2018
Transcript
43 slides
October 7th, 2018 at Glowfish Sathorn Bringing Firebase Admin SDK
to your server Henry Lim @henrylim96
#FirebaseDevDay สวัสดี ครับ, ผมชื่อ เฮนรี่ ลิม
#FirebaseDevDay
None
#FirebaseDevDay Firebase by Platform • Android • iOS • Web
• Flutter • And more ...
None
#FirebaseDevDay Firebase Admin SDK
#FirebaseDevDay Firebase has got you covered Firebase provides a suite
of SDKs, called Admin SDKs, for developing back-end software that interact with Firebase.
#FirebaseDevDay Firebase Admin SDKs Access Firebase from … • Servers
owned or managed by app developers • Cloud IaaS and PaaS environments • Serverless platforms
#FirebaseDevDay What can you do with Firebase Admin SDK
Firebase Admin SDK Features Feature Node.js Java Python Go C#
Custom Token Minting ✓ ✓ ✓ ✓ ✓ ID Token Verification ✓ ✓ ✓ ✓ ✓ User Management ✓ ✓ ✓ ✓ Control Access With Custom Claims ✓ ✓ ✓ ✓ Refresh Token Revocation ✓ ✓ ✓ ✓ Import Users ✓ ✓ ✓ ✓ Session Cookie Management ✓ ✓ ✓ Realtime Database ✓ ✓ ✓ ✓ Cloud Messaging ✓ ✓ ✓ ✓ Manage Topic Subscriptions ✓ ✓ ✓ ✓ Cloud Storage ✓ ✓ ✓ ✓ Cloud Firestore ✓ ✓ ✓ ✓
None
#FirebaseDevDay Introducing Fire Tomyam firetomyam.firebaseapp.com
#FirebaseDevDay
#FirebaseDevDay
#FirebaseDevDay
#FirebaseDevDay Add the Firebase Admin SDK
// Download the SDK (NPM) npm install firebase-admin --save
#FirebaseDevDay Initialize the Firebase Admin SDK
// Initialize the SDK const admin = require('firebase-admin'); const serviceAccount
= require('path/to/serviceAccountKey.json'); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: 'https://<DATABASE_NAME>.firebaseio.com' });
None
#FirebaseDevDay
// Initialize the SDK // Cloud Functions for Firebase const
functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase);
#FirebaseDevDay A custom permissions model We want to define two
classes of users - admin and regular users.
#FirebaseDevDay Control Access with Custom Claims and Security Rules
// Firebase Realtime Database Rules { "rules": { "items": {
".read": true, ".write": "auth.token.admin === true", } } }
#FirebaseDevDay
document.querySelector('.form').addEventListener('submit', event => { event.preventDefault(); database.ref('admin').push(document.querySelector('.form #email').value) .then(() => {
alert('Added successfully!'); window.location.replace('/'); }) .catch(error => { alert(error); }) });
exports.newAdmin = functions.database.ref(`admin/{email}`) .onCreate((snapshot, context) => { const email =
context.params.email; admin.auth().getUserByEmail(email) .then(userRecord => { return userRecord.uid; }) .then(uid => { return admin.auth().setCustomUserClaims(uid, {admin: true}); }) .catch(error => { console.log(error); }) })
exports.newAdmin = functions.database.ref(`admin/{email}`) .onCreate((snapshot, context) => { const email =
context.params.email; admin.auth().getUserByEmail(email) .then(userRecord => { return userRecord.uid; }) .then(uid => { return admin.auth().setCustomUserClaims(uid, {admin: true}); }) .catch(error => { console.log(error); }) })
// Firebase Realtime Database Rules { "rules": { "items": {
".read": true, ".write": "auth.token.admin === true", } } }
#FirebaseDevDay
#FirebaseDevDay Send Messages to Topics
#FirebaseDevDay
var messaging = firebase.messaging(); var database = firebase.database(); if ('serviceWorker'
in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/firebase-messaging-sw.js') .then((registration) => { messaging.useServiceWorker(registration); }) .then(() => { return messaging.requestPermission(); }) .then(() => { return messaging.getToken(); }) .then((token) => { database.ref('notification/' + token).set(true); }) .catch((err) => { console.log('ServiceWorker registration failed: ', err); }); }); };
var messaging = firebase.messaging(); var database = firebase.database(); if ('serviceWorker'
in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/firebase-messaging-sw.js') .then((registration) => { messaging.useServiceWorker(registration); }) .then(() => { return messaging.requestPermission(); }) .then(() => { return messaging.getToken(); }) .then((token) => { database.ref('notification/' + token).set(true); }) .catch((err) => { console.log('ServiceWorker registration failed: ', err); }); }); };
exports.sendNotification = functions.database.ref(`items/{itemId}`) .onCreate((snapshot, context) => { const data =
snapshot.val(); const msg = admin.messaging.Message = { topic: 'new-restaurant', notification: { title: 'New Restaurant in FireTomyam', body: `We just added "${data.name}" to our collection. Enjoy!` } } return admin.messaging().send(msg) .then((resp) => { return resp; }) .catch(() => {}) })
exports.sendNotification = functions.database.ref(`items/{itemId}`) .onCreate((snapshot, context) => { const data =
snapshot.val(); const msg = admin.messaging.Message = { topic: 'new-restaurant', notification: { title: 'New Restaurant in FireTomyam', body: `We just added "${data.name}" to our collection. Enjoy!` } } return admin.messaging().send(msg) .then((resp) => { return resp; }) .catch(() => {}) })
#FirebaseDevDay
#FirebaseDevDay What else you can do with Firebase Admin SDK
#FirebaseDevDay
#FirebaseDevDay
Thank You! #FirebaseDevDay Helpful resources fb.com/FirebaseThailand fb.com/groups/FirebaseDevTH medium.com/FirebaseThailand Henry Lim
@henrylim96
More Decks by Henry Lim
See All by Henry Lim
Building Malaysia Vaccine Tracker Twitter Bot
limhenry
0
75
What's New in Web 2020
limhenry
0
680
Building a Better Website with Chrome DevTools
limhenry
0
230
Bringing your PWA to the Google Play Store with Trusted Web Activities
limhenry
0
1.3k
Building a better web for everyone - DevFest George Town 2018
limhenry
0
67
Building a better web for everyone - DevFest x BizFest Cebu 2018 / DevFest Bangkok 2018
limhenry
0
160
Bringing Firebase Admin SDK to your server - DevFest x BizFest Cebu 2018
limhenry
0
86
The Modern Web: State of the Union (I/O Extended '18 Kuala Lumpur)
limhenry
0
190
Building a better web with Web Components and Polymer 2.0
limhenry
0
78
Other Decks in Technology
See All in Technology
SREのためのFinOps入門
muziyoshiz
3
1.4k
Bots in Kiro Crew (One point of contact for ongoing work) | Kiro: Zero to Hero 12
inariku
PRO
1
120
BALLAS Technology Deck
ballas_inc
0
500
長い仕事を任せる (Workflows、クラウドセッション、Kiro Web) | 目指せ Kiro マスター 10
inariku
PRO
3
170
AWS構成から考えるWebセキュリティ ― WordPressの構築経験から考える公開範囲と更新運用【JAWS FESTA 2026 in AKITA】
cscengineer
PRO
2
410
AI時代に求められる優秀なTechLeadの振る舞い
pospome
11
16k
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
240
令和の今、あらためて IAM を考える。アクセスキーを「無くせない現実」との向き合い方
kazzpapa3
0
620
Shared Signals Framework 仕様解説
oidfj
0
370
Building Audio Plugin Ecosystem for Android in 2026
atsushieno
2
170
Linuxネットワークスタック進化の軌跡: 過去10年の歩みと最新トレンド
orimanabu
1
320
Kiro を使うコツ (頼み方、覚えさせ方、任せ方) | 目指せ Kiro マスター 09
inariku
PRO
3
140
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
6.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
1
310
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
RailsConf 2023
tenderlove
30
1.6k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
520
Designing for humans not robots
tammielis
254
26k
Side Projects
sachag
456
43k
Documentation Writing (for coders)
carmenintech
77
5.6k