Firebase: Environment Config
ปกติการพัฒนาโปรแกรมต่างๆ จะมีการเก็บค่า Config ต่างๆ โดยทั่วไปเราอาจจะใช้วิธีการสร้างไฟล์ .env มาเพื่อเก็บค่า หรือสร้างไฟล์ config.json ขึ้นมา ข้อเสียคือ ถ้าเรามีนักพัฒนาหลายคน อาจจะเกิดความลำบากในการ share ค่า config เหล่านี้เนื่องจากเราไม่สามารถเอาไฟล์ .evn หรือ config.json ขึ้นไปบน git ได้ ด้วยเหตุผลเรื่องความปลอดภัย และเนื่องจากมันเป็น Text file ทำให้ใครที่ได้ไปก็สามารถเปิดดูได้เลยทำให้ไม่ปลอดภัย
วันนี้ผมจะเสนอวิธีการเก็บและเรียกใช้ค่า config แบบง่ายๆ ผ่าน firebase cli โดยสามารถเรียกใช้งาน config ได้ทุกๆ functions และยังสามารถกำหนดความปลอดภัยตามการ setting ของ project ได้เลยครับ
โดยบทความนี้ผมจะอ้างอิงการสร้าง LINE Bot จากบทความนี้นะครับ
มาเริ่มกันเลย!!! โดยโจทย์บทความนี้ผมจะสร้าง Functions Config เพื่อเก็บค่า LINE Channel Access Token แล้วเอาไปใช้ LINE Bot นะครับ
SET
เริ่มต้นเราจะทำการ set ค่า config กันก่อนนะครับ โดยรูปแบบคำสั่งจะเป็นแบบนี้นะครับ
firebase function:config:set key=”value”
ให้เปิด Terminal/Command line ขึ้นมาแล้ว เข้าไปที่ project ของเรา แล้วพิมพ์คำสั่ง ตามนี้เลยครับ ให้แทนค่า LINE-CHANNEL-ACCESS-TOKEN เป็น access token ที่เราได้จาก LINE นะครับ
firebase functions:config:set line.channelaccesstoken=”LINE-CHANNEL-ACCESS-TOKEN”
ผลลัพธ์ที่ได้หลังจาก set จะเป็นแบบนี้ครับ
✔ Functions config updated.Please deploy your functions for the change to take effect by running firebase deploy — only functions
สังเกตุว่า firebase cli จะมีข้อความบอกให้เรา deploy functions ใหม่ด้วยก่อนเรียกใช้ค่า config ที่เราเปลี่ยนแปลงไป
ปล. เงื่อนไขการตั้ง key และ value จะมีกฎนิดนึงครับ
- Key ต้องเป็นตัวเล็กเท่านั้น
- ห้ามมี space ระหว่าง key=value
GET
ทดสอบลอง Get config ออกมาดู
firebase functions:config:get
ผลลัพธ์ที่ได้จะเป็น json แบบนี้ครับ แสดงว่าเรา set ค่าเรียบร้อยพร้อมใช้แล้วครับ
{
“line”: {
“channelaccesstoken”: “LINE-CHANNEL-ACCESS-TOKEN”
}
}
USE
ตอนใช้งานเราสามารถเรียกใช้ค่า functions.config() แบบนี้ได้เลยครับ ทดลองเอาไปแทนตรง Authorization
Authorization:`Bearer ${functions.config().line.channelaccesstoken}`
ทดลองเรียกใช้ bot หลังจาก เปลี่ยนค่า config สามารถใช้งานได้ปกติครับ
USE with Emulator Suite
สำหรับใครที่จะใช้ Environment config กับ Firebase Emulator Suite ตัว Emulator จะหาพวกค่า config ไม่เจอ เนื่องจาก config ต่างๆจะอยู่ใน server
ซึ่งวิธีแก้ก็ให้ไปดูดค่า config เหล่านั้นลงมาใน local ก่อน โดยเข้าไปที่โฟลเดอร์ /functions แล้วเรียกคำสั่ง
firebase functions:config:get > .runtimeconfig.json
CR : Jirawatee
สรุป
การใช้งาน functions config มีข้อดีตรงที่เราสามารถเรียกใช้งานค่า config นี้ที่ functions ไหนก็ได้ โดยนักพัฒนาทุกคนที่มีสิทธิสามารถเรียกใช้งานได้เลย และความปลอดภัยในการใช้งานโดยสามารถกำหนดสิทธิได้จาก Project setting ได้เลย
ทดลองเอาไปปรับใช้กันดูนะครับ