เพิ่ม Firebase Admin SDK ไปยังเซิร์ฟเวอร์

Admin SDK คือชุดไลบรารีเซิร์ฟเวอร์ที่ช่วยให้คุณโต้ตอบกับ Firebase จากสภาพแวดล้อมที่มีสิทธิ์เพื่อดำเนินการต่างๆ เช่น

  • ดำเนินการค้นหาและการเปลี่ยนแปลงในบริการ Firebase SQL Connect เพื่อจัดการข้อมูลจำนวนมากและการดำเนินการอื่นๆ ด้วยสิทธิ์ของผู้ดูแลระบบอย่างเต็มรูปแบบ
  • อ่านและเขียนข้อมูล Realtime Database ด้วยสิทธิ์ของผู้ดูแลระบบแบบเต็มรูปแบบ
  • ส่งข้อความ Firebase Cloud Messaging โดยใช้โปรแกรมด้วยวิธีง่ายๆ ซึ่งเป็นทางเลือกแทนโปรโตคอลเซิร์ฟเวอร์ Firebase Cloud Messaging
  • สร้างและยืนยันโทเค็นการตรวจสอบสิทธิ์ Firebase
  • เข้าถึงทรัพยากร Google Cloud เช่น บัケット Cloud Storage และฐานข้อมูล Cloud Firestore ที่เชื่อมโยงกับโปรเจ็กต์ Firebase ของคุณ
  • สร้างคอนโซลผู้ดูแลระบบที่เรียบง่ายของคุณเองเพื่อทำสิ่งต่างๆ เช่น ค้นหาข้อมูลผู้ใช้หรือเปลี่ยนอีเมลของผู้ใช้สำหรับการตรวจสอบสิทธิ์

หากสนใจใช้ Node.js SDK เป็นไคลเอ็นต์สำหรับการเข้าถึงของผู้ใช้ปลายทาง (เช่น ในเดสก์ท็อป Node.js หรือแอปพลิเคชัน IoT) แทนการเข้าถึงระดับผู้ดูแลระบบจากสภาพแวดล้อมที่มีสิทธิ์ (เช่น เซิร์ฟเวอร์) คุณควรทำตามวิธีการตั้งค่า JavaScript SDK ของไคลเอ็นต์แทน

เมทริกซ์ฟีเจอร์ต่อไปนี้แสดงฟีเจอร์ Firebase ที่รองรับในแต่ละภาษา

ฟีเจอร์ Node.js Java Python Go C# Dart
การสร้างโทเค็นที่กำหนดเอง
การยืนยันโทเค็นระบุตัวตน
การจัดการผู้ใช้
ควบคุมการเข้าถึงด้วยการอ้างสิทธิ์ที่กำหนดเอง
การเพิกถอนโทเค็นการรีเฟรช
นำเข้าผู้ใช้
การจัดการคุกกี้เซสชัน
การสร้างลิงก์การดำเนินการทางอีเมล
การจัดการการกำหนดค่าผู้ให้บริการ SAML/OIDC
การรองรับกลุ่มผู้ใช้หลายกลุ่ม
Firebase SQL Connect
Realtime Database *
Firebase Cloud Messaging
FCM Multicast
จัดการการสมัครรับข้อมูลหัวข้อ FCM
Cloud Storage
Cloud Firestore
จัดคิวฟังก์ชันด้วย Cloud Tasks
การจัดการโครงการ
กฎความปลอดภัย
การจัดการโมเดล ML
Firebase Remote Config
Firebase App Check
Firebase Extensions
Firebase Phone Number Verification

ดูข้อมูลเพิ่มเติมเกี่ยวกับการผสานรวม Admin SDK สำหรับการใช้งานเหล่านี้ได้ในเอกสารประกอบที่เกี่ยวข้องของ Realtime Database, FCM, Authentication, Remote Config และ Cloud Storage ส่วนที่เหลือของหน้านี้จะมุ่งเน้นที่การตั้งค่าพื้นฐานสำหรับ Admin SDK

ข้อกำหนดเบื้องต้น

  • ตรวจสอบว่าคุณมีแอปเซิร์ฟเวอร์

  • ตรวจสอบว่าเซิร์ฟเวอร์ของคุณเรียกใช้สิ่งต่อไปนี้ โดยขึ้นอยู่กับ Admin SDK ที่คุณใช้

    • Admin Node.js SDK — Node.js 22+
    • Admin Java SDK — Java 8 ขึ้นไป
    • Admin Python SDK — Python 3.9 ขึ้นไป (แนะนำ Python 3.10 ขึ้นไป)
      การรองรับ Python 3.9 เลิกใช้งานแล้ว
    • Admin Go SDK — Go 1.25 ขึ้นไป
    • Admin .NET SDK — .NET Framework 4.6.2 ขึ้นไป หรือ .NET Standard 2.0 หรือ .NET 6.0 ขึ้นไป (แนะนำ .NET 8.0 ขึ้นไป)
      เราเลิกใช้งานการรองรับ .NET 6.0 และ 7.0 แล้ว
    • Admin Dart SDK เวอร์ชันทดลอง - ตรวจสอบว่าเซิร์ฟเวอร์ของคุณใช้ Dart SDK เวอร์ชัน 3.9 ขึ้นไป

ตั้งค่าโปรเจ็กต์ Firebase และบัญชีบริการ

หากต้องการใช้ Firebase Admin SDK คุณจะต้องมีสิ่งต่อไปนี้

  • โปรเจ็กต์ Firebase
  • บัญชีบริการ Firebase Admin SDK เพื่อสื่อสารกับ Firebase ระบบจะสร้างบัญชีบริการนี้โดยอัตโนมัติเมื่อคุณสร้างโปรเจ็กต์ Firebase หรือเพิ่ม Firebase ลงในโปรเจ็กต์ Google Cloud
  • ไฟล์การกำหนดค่าที่มีข้อมูลเข้าสู่ระบบของบัญชีบริการ

หากยังไม่มีโปรเจ็กต์ Firebase คุณต้องสร้างโปรเจ็กต์ในคอนโซล Firebase ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรเจ็กต์ Firebase ได้ที่ทำความเข้าใจโปรเจ็กต์ Firebase

เพิ่ม SDK

หากกำลังตั้งค่าโปรเจ็กต์ใหม่ คุณต้องติดตั้ง SDK สำหรับภาษาที่เลือก

Node.js

Firebase Admin Node.js SDK พร้อมใช้งานใน npm หากยังไม่มีไฟล์ package.json ให้สร้างไฟล์ผ่าน npm init ถัดไป ให้ติดตั้งแพ็กเกจ npm firebase-admin และบันทึกลงใน package.json โดยทำดังนี้

npm install firebase-admin --save

หากต้องการใช้โมดูลในแอปพลิเคชัน ให้requireโมดูลจากไฟล์ JavaScript ใดก็ได้ ดังนี้

const { initializeApp } = require('firebase-admin/app');

หากใช้ ES2015 คุณสามารถ import โมดูลได้ดังนี้

import { initializeApp } from 'firebase-admin/app';

Java

Firebase Admin Java SDK เผยแพร่ไปยังที่เก็บส่วนกลางของ Maven หากต้องการติดตั้งไลบรารี ให้ประกาศไลบรารีเป็นทรัพยากร Dependency ในไฟล์ build.gradle ดังนี้

dependencies {
  implementation 'com.google.firebase:firebase-admin:9.11.0'
}

หากใช้ Maven เพื่อสร้างแอปพลิเคชัน คุณสามารถเพิ่มทรัพยากร Dependency ต่อไปนี้ลงใน pom.xml ได้

<dependency>
  <groupId>com.google.firebase</groupId>
  <artifactId>firebase-admin</artifactId>
  <version>9.11.0</version>
</dependency>

Python

Firebase Admin Python SDK พร้อมใช้งานผ่าน pip คุณสามารถติดตั้งไลบรารีสำหรับผู้ใช้ทั้งหมดผ่าน sudo ได้โดยทำดังนี้

sudo pip install firebase-admin

หรือจะติดตั้งไลบรารีสำหรับผู้ใช้ปัจจุบันเท่านั้นโดยส่งแฟล็ก --user ก็ได้

pip install --user firebase-admin

Go

คุณติดตั้ง Admin SDK ของ Go ได้โดยใช้ยูทิลิตี go get ดังนี้

# Install the latest version:
go get firebase.google.com/go/v4@latest

# Or install a specific version:
go get firebase.google.com/go/v4@4.22.0

C#

คุณติดตั้ง Admin SDK ของ .NET ได้โดยใช้เครื่องมือจัดการแพ็กเกจ .NET ดังนี้

Install-Package FirebaseAdmin -Version 3.7.0

หรือจะติดตั้งโดยใช้ยูทิลิตีบรรทัดคำสั่ง dotnet ก็ได้ ดังนี้

dotnet add package FirebaseAdmin --version 3.7.0

หรือจะติดตั้งโดยเพิ่มรายการอ้างอิงแพ็กเกจต่อไปนี้ลงในไฟล์ .csproj ก็ได้

<ItemGroup>
  <PackageReference Include="FirebaseAdmin" Version="3.7.0" />
</ItemGroup>

Dart (เวอร์ชันทดลอง)

dart pub add firebase_admin_sdk

หากต้องการใช้โมดูลในแอปพลิเคชัน ให้นำเข้าโมดูลตามที่แสดงต่อไปนี้

import 'package:firebase_admin_sdk';

// Also import the separate Firestore package if you're interacting with Firestore.
import 'package:google_cloud_firestore/google_cloud_firestore.dart';

เริ่มต้น SDK

เมื่อสร้างโปรเจ็กต์ Firebase แล้ว คุณจะเริ่มต้น SDK ด้วยข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน ได้ เนื่องจากการค้นหาข้อมูลเข้าสู่ระบบเริ่มต้นเป็นแบบอัตโนมัติทั้งหมดในสภาพแวดล้อมของ Google โดยไม่จำเป็นต้องระบุตัวแปรสภาพแวดล้อมหรือการกำหนดค่าอื่นๆ เราจึงขอแนะนำอย่างยิ่งให้ใช้วิธีนี้ในการเริ่มต้น SDK สำหรับแอปพลิเคชันที่ทำงานในสภาพแวดล้อมของ Google เช่น Firebase App Hosting, Cloud Run, App Engine และ Cloud Functions for Firebase

หากต้องการระบุตัวเลือกการเริ่มต้นสำหรับบริการต่างๆ เช่น Realtime Database, Cloud Storage หรือ Cloud Functions ให้ใช้ตัวแปรสภาพแวดล้อม FIREBASE_CONFIG หากเนื้อหาของตัวแปร FIREBASE_CONFIG ขึ้นต้นด้วย { ระบบจะแยกวิเคราะห์เป็นออบเจ็กต์ JSON มิฉะนั้น SDK จะถือว่าสตริงเป็นเส้นทางของไฟล์ JSON ที่มีตัวเลือก

Node.js

const app = initializeApp();

Java

FirebaseApp.initializeApp();

Python

default_app = firebase_admin.initialize_app()

Go

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create();

Dart (เวอร์ชันทดลอง)

final admin = FirebaseApp.initializeApp();

เมื่อเริ่มต้นแล้ว คุณจะใช้ Admin SDK เพื่อทำงานประเภทต่อไปนี้ให้เสร็จสมบูรณ์ได้

การใช้โทเค็นการรีเฟรช OAuth 2.0

Admin SDK ยังมีข้อมูลเข้าสู่ระบบที่ช่วยให้คุณตรวจสอบสิทธิ์ด้วยโทเค็นการรีเฟรช Google OAuth2 ได้ด้วย ดังนี้

Node.js

const myRefreshToken = '...'; // Get refresh token from OAuth2 flow

initializeApp({
  credential: refreshToken(myRefreshToken),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

Java

FileInputStream refreshToken = new FileInputStream("path/to/refreshToken.json");

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.fromStream(refreshToken))
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

Python

cred = credentials.RefreshToken('path/to/refreshToken.json')
default_app = firebase_admin.initialize_app(cred)

Go

opt := option.WithCredentialsFile("path/to/refreshToken.json")
config := &firebase.Config{ProjectID: "my-project-id"}
app, err := firebase.NewApp(context.Background(), config, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = CredentialFactory.FromFile<UserCredential>("path/to/refreshToken.json").ToGoogleCredential(),
});

เริ่มต้น SDK ในสภาพแวดล้อมที่ไม่ใช่ของ Google

หากคุณทำงานในสภาพแวดล้อมเซิร์ฟเวอร์ที่ไม่ใช่ของ Google ซึ่งการค้นหาข้อมูลเข้าสู่ระบบเริ่มต้นไม่สามารถทำงานอัตโนมัติได้อย่างสมบูรณ์ คุณสามารถเริ่มต้น SDK ด้วยไฟล์คีย์บัญชีบริการที่ส่งออก

โปรเจ็กต์ Firebase รองรับบัญชีบริการของ Google ซึ่งคุณใช้เรียก API ของเซิร์ฟเวอร์ Firebase จากเซิร์ฟเวอร์แอปหรือสภาพแวดล้อมที่เชื่อถือได้ หากคุณกำลังพัฒนาโค้ดในเครื่องหรือติดตั้งใช้งานแอปพลิเคชันในองค์กร คุณสามารถใช้ข้อมูลเข้าสู่ระบบที่ได้รับโดยใช้บัญชีบริการนี้เพื่อให้สิทธิ์คำขอของเซิร์ฟเวอร์

คุณดูบัญชีบริการทั้งหมดสำหรับโปรเจ็กต์ Firebase ได้ในแท็บ การตั้งค่า > บัญชีบริการ

หากต้องการตรวจสอบสิทธิ์บัญชีบริการและให้สิทธิ์เข้าถึงบริการ Firebase คุณต้องสร้างไฟล์คีย์ส่วนตัวในรูปแบบ JSON

วิธีสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการ

  1. ในคอนโซล Firebase ให้ไปที่ การตั้งค่า > แท็บบัญชีบริการ

  2. คลิกสร้างคีย์ส่วนตัวใหม่ แล้วยืนยันโดยคลิกสร้างคีย์

  3. จัดเก็บไฟล์ JSON ที่มีคีย์ไว้อย่างปลอดภัย

เมื่อให้สิทธิ์ผ่านบัญชีบริการ คุณจะมี 2 ตัวเลือกในการระบุข้อมูลเข้าสู่ระบบให้กับแอปพลิเคชัน คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS หรือส่งเส้นทางไปยังคีย์บัญชีบริการในโค้ดอย่างชัดแจ้งก็ได้ ตัวเลือกแรกมีความปลอดภัยมากกว่าและเราขอแนะนำอย่างยิ่ง

วิธีตั้งค่าตัวแปรสภาพแวดล้อม

ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางไฟล์ของไฟล์ JSON ที่มีคีย์บัญชีบริการ ตัวแปรนี้จะมีผลกับเซสชัน Shell ปัจจุบันเท่านั้น ดังนั้นหากคุณเปิดเซสชันใหม่ ให้ตั้งค่าตัวแปรอีกครั้ง

Linux หรือ macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

เมื่อใช้ PowerShell ให้ทำดังนี้

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน (ADC) จะสามารถระบุข้อมูลเข้าสู่ระบบของคุณโดยนัย ซึ่งช่วยให้คุณใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการเมื่อทดสอบหรือเรียกใช้ในสภาพแวดล้อมที่ไม่ใช่ของ Google ได้

เริ่มต้น SDK ดังที่แสดง

Node.js

initializeApp({
    credential: applicationDefault(),
    databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

Java

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

Python

default_app = firebase_admin.initialize_app()

Go

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "my-project-id",
});

เริ่มต้นแอปหลายรายการ

ในกรณีส่วนใหญ่ คุณเพียงแค่ต้องเริ่มต้นแอปเริ่มต้นแอปเดียว คุณสามารถเข้าถึงบริการจากแอปนั้นได้ 2 วิธีที่เทียบเท่ากัน ดังนี้

Node.js

// Initialize the default app
const defaultApp = initializeApp(defaultAppConfig);

console.log(defaultApp.name);  // '[DEFAULT]'

// Retrieve services via the defaultApp variable...
let defaultAuth = getAuth(defaultApp);
let defaultDatabase = getDatabase(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = getAuth();
defaultDatabase = getDatabase();

Java

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

System.out.println(defaultApp.getName());  // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
FirebaseAuth defaultAuth = FirebaseAuth.getInstance(defaultApp);
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.getInstance();
defaultDatabase = FirebaseDatabase.getInstance();

Python

# Import the Firebase service
from firebase_admin import auth

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)
print(default_app.name)  # "[DEFAULT]"

# Retrieve services via the auth package...
# auth.create_custom_token(...)

Go

// Initialize default app
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access auth service from the default app
client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

C#

// Initialize the default app
var defaultApp = FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});
Console.WriteLine(defaultApp.Name); // "[DEFAULT]"

// Retrieve services by passing the defaultApp variable...
var defaultAuth = FirebaseAuth.GetAuth(defaultApp);

// ... or use the equivalent shorthand notation
defaultAuth = FirebaseAuth.DefaultInstance;

กรณีการใช้งานบางกรณีอาจกำหนดให้คุณสร้างแอปหลายแอปพร้อมกัน เช่น คุณอาจต้องการอ่านข้อมูลจาก Realtime Database ของโปรเจ็กต์ Firebase หนึ่งและสร้างโทเค็นที่กำหนดเองสำหรับอีกโปรเจ็กต์หนึ่ง หรือคุณอาจต้องการตรวจสอบสิทธิ์แอป 2 แอปด้วยข้อมูลเข้าสู่ระบบที่แยกกัน Firebase SDK ช่วยให้คุณสร้างแอปหลายแอปพร้อมกันได้ โดยแต่ละแอปจะมีข้อมูลการกำหนดค่าของตัวเอง

Node.js

// Initialize the default app
initializeApp(defaultAppConfig);

// Initialize another app with a different config
var otherApp = initializeApp(otherAppConfig, 'other');

console.log(getApp().name);  // '[DEFAULT]'
console.log(otherApp.name);     // 'other'

// Use the shorthand notation to retrieve the default app's services
const defaultAuth = getAuth();
const defaultDatabase = getDatabase();

// Use the otherApp variable to retrieve the other app's services
const otherAuth = getAuth(otherApp);
const otherDatabase = getDatabase(otherApp);

Java

// Initialize the default app
FirebaseApp defaultApp = FirebaseApp.initializeApp(defaultOptions);

// Initialize another app with a different config
FirebaseApp otherApp = FirebaseApp.initializeApp(otherAppConfig, "other");

System.out.println(defaultApp.getName());  // "[DEFAULT]"
System.out.println(otherApp.getName());    // "other"

// Use the shorthand notation to retrieve the default app's services
FirebaseAuth defaultAuth = FirebaseAuth.getInstance();
FirebaseDatabase defaultDatabase = FirebaseDatabase.getInstance();

// Use the otherApp variable to retrieve the other app's services
FirebaseAuth otherAuth = FirebaseAuth.getInstance(otherApp);
FirebaseDatabase otherDatabase = FirebaseDatabase.getInstance(otherApp);

Python

# Initialize the default app
default_app = firebase_admin.initialize_app(cred)

#  Initialize another app with a different config
other_app = firebase_admin.initialize_app(cred, name='other')

print(default_app.name)    # "[DEFAULT]"
print(other_app.name)      # "other"

# Retrieve default services via the auth package...
# auth.create_custom_token(...)

# Use the `app` argument to retrieve the other app's services
# auth.create_custom_token(..., app=other_app)

Go

// Initialize the default app
defaultApp, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Initialize another app with a different config
opt := option.WithCredentialsFile("service-account-other.json")
otherApp, err := firebase.NewApp(context.Background(), nil, opt)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

// Access Auth service from default app
defaultClient, err := defaultApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

// Access auth service from other app
otherClient, err := otherApp.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

C#

// Initialize the default app
var defaultApp = FirebaseApp.Create(defaultOptions);

// Initialize another app with a different config
var otherApp = FirebaseApp.Create(otherAppConfig, "other");

Console.WriteLine(defaultApp.Name); // "[DEFAULT]"
Console.WriteLine(otherApp.Name); // "other"

// Use the shorthand notation to retrieve the default app's services
var defaultAuth = FirebaseAuth.DefaultInstance;

// Use the otherApp variable to retrieve the other app's services
var otherAuth = FirebaseAuth.GetAuth(otherApp);

ตั้งค่าขอบเขตสำหรับ Realtime Database และ Authentication

หากคุณใช้ VM ของ Google Compute Engine กับข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน สำหรับ Realtime Database หรือ Authentication โปรดตรวจสอบว่าได้ตั้งค่าขอบเขตการเข้าถึงที่ถูกต้องด้วย สำหรับ Realtime Database และ Authentication คุณต้องมีขอบเขตที่ลงท้ายด้วย userinfo.email และ cloud-platform หรือ firebase.database หากต้องการตรวจสอบขอบเขตการเข้าถึงที่มีอยู่และเปลี่ยนแปลง ให้เรียกใช้คำสั่งต่อไปนี้โดยใช้ gcloud

gcloud

# Check the existing access scopes
gcloud compute instances describe [INSTANCE_NAME] --format json

# The above command returns the service account information. For example:
  "serviceAccounts": [
   {
    "email": "your.gserviceaccount.com",
    "scopes": [
     "https://www.googleapis.com/auth/cloud-platform",
     "https://www.googleapis.com/auth/userinfo.email"
     ]
    }
  ],

# Stop the VM, then run the following command, using the service account
# that gcloud returned when you checked the scopes.

gcloud compute instances set-service-account [INSTANCE_NAME] --service-account "your.gserviceaccount.com" --scopes "https://www.googleapis.com/auth/firebase.database,https://www.googleapis.com/auth/userinfo.email"

ทดสอบด้วยข้อมูลเข้าสู่ระบบของผู้ใช้ปลายทาง gcloud

เมื่อทดสอบ Admin SDK ในเครื่องด้วยข้อมูลรับรองเริ่มต้นของแอปพลิเคชันของ Google ที่ได้จากการเรียกใช้ gcloud auth application-default login คุณจะต้องทำการเปลี่ยนแปลงเพิ่มเติมเพื่อใช้ Firebase Authentication เนื่องจากสาเหตุต่อไปนี้

  • Firebase Authentication ไม่ยอมรับข้อมูลเข้าสู่ระบบของผู้ใช้ปลายทาง gcloud ที่สร้างขึ้นโดยใช้รหัสไคลเอ็นต์ OAuth ของ gcloud
  • Firebase Authentication กำหนดให้ต้องระบุรหัสโปรเจ็กต์ในการเริ่มต้นสำหรับข้อมูลเข้าสู่ระบบของผู้ใช้ปลายทางประเภทนี้

วิธีแก้ปัญหาคือ คุณสามารถสร้างข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน Google ใน gcloud โดยใช้รหัสไคลเอ็นต์ OAuth 2.0 ของคุณเอง รหัสไคลเอ็นต์ OAuth ต้องเป็นประเภทแอปพลิเคชันแอปบนเดสก์ท็อป

gcloud

gcloud auth application-default login --client-id-file=[/path/to/client/id/file]

คุณสามารถระบุรหัสโปรเจ็กต์อย่างชัดเจนในการเริ่มต้นแอป หรือจะใช้ตัวแปรสภาพแวดล้อม GOOGLE_CLOUD_PROJECT ก็ได้ วิธีหลังจะช่วยให้คุณไม่ต้องทำการเปลี่ยนแปลงเพิ่มเติมเพื่อทดสอบโค้ด

วิธีระบุรหัสโปรเจ็กต์อย่างชัดเจน

Node.js

import { initializeApp, applicationDefault } from 'firebase-admin/app';

initializeApp({
  credential: applicationDefault(),
  projectId: '<FIREBASE_PROJECT_ID>',
});

Java

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setProjectId("<FIREBASE_PROJECT_ID>")
    .build();

FirebaseApp.initializeApp(options);

Python

app_options = {'projectId': '<FIREBASE_PROJECT_ID>'}
default_app = firebase_admin.initialize_app(options=app_options)

Go

config := &firebase.Config{ProjectID: "<FIREBASE_PROJECT_ID>"}
app, err := firebase.NewApp(context.Background(), config)
if err != nil {
        log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ProjectId = "<FIREBASE_PROJECT_ID>",
});

ขั้นตอนถัดไป

ดูข้อมูลเกี่ยวกับ Firebase

เพิ่มฟีเจอร์ Firebase ลงในแอปโดยทำดังนี้

  • เขียนแบ็กเอนด์แบบ Serverless ด้วย Cloud Functions
  • จัดเก็บข้อมูลด้วย Realtime Database หรือข้อมูล BLOB ด้วย Cloud Storage
  • รับการแจ้งเตือนด้วย Cloud Messaging