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 เป็นไคลเอ็นต์สำหรับการเข้าถึงของผู้ใช้ปลายทาง (เช่น ในแอปพลิเคชัน IoT หรือเดสก์ท็อป Node.js) แทนที่จะใช้สิทธิ์การเข้าถึงระดับผู้ดูแลระบบจากสภาพแวดล้อมที่มีสิทธิ์ (เช่น เซิร์ฟเวอร์) คุณควรทำตามวิธีการตั้งค่า JavaScript SDK ของไคลเอ็นต์แทน
ตารางเมทริกซ์ฟีเจอร์ต่อไปนี้แสดงฟีเจอร์ Firebase ที่รองรับในแต่ละภาษา
ดูข้อมูลเพิ่มเติมเกี่ยวกับการผสานรวม 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 แล้ว - Dart SDK เวอร์ชันทดลองสำหรับผู้ดูแลระบบ - ตรวจสอบว่าเซิร์ฟเวอร์ของคุณใช้ Dart SDK เวอร์ชัน 3.9 ขึ้นไป
- Admin Node.js SDK — Node.js 22+
ตั้งค่าโปรเจ็กต์ 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 ถัดไป ให้ติดตั้งแพ็กเกจ firebase-admin npm และบันทึกลงใน 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 วิธีติดตั้งเวอร์ชันล่าสุด
go get firebase.google.com/go/v4@latest
วิธีติดตั้งเวอร์ชันที่ต้องการ
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 เนื่องจากการค้นหาข้อมูลเข้าสู่ระบบเริ่มต้นเป็นแบบอัตโนมัติทั้งหมดในสภาพแวดล้อมของ 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 เพื่อทำงานประเภทต่อไปนี้ให้เสร็จสมบูรณ์ได้
- ใช้การตรวจสอบสิทธิ์ที่กำหนดเอง
- จัดการผู้ใช้ Firebase Authentication
- ดำเนินการค้นหาและเปลี่ยนแปลงด้านการดูแลระบบในบริการ Firebase SQL Connect
- อ่านและเขียนข้อมูลจาก Realtime Database
- ส่งข้อความ Firebase Cloud Messaging
การใช้โทเค็นการรีเฟรช 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
วิธีสร้างไฟล์คีย์ส่วนตัวสำหรับบัญชีบริการ
ในคอนโซล Firebase ให้ไปที่
การตั้งค่า > แท็บบัญชีบริการคลิกสร้างคีย์ส่วนตัวใหม่ แล้วยืนยันโดยคลิกสร้างคีย์
จัดเก็บไฟล์ JSON ที่มีคีย์ไว้อย่างปลอดภัย
เมื่อให้สิทธิ์ผ่านบัญชีบริการ คุณจะมี 2 ตัวเลือกในการระบุข้อมูลเข้าสู่ระบบให้กับแอปพลิเคชัน คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS หรือส่งเส้นทางไปยังคีย์บัญชีบริการในโค้ดอย่างชัดแจ้งก็ได้
ตัวเลือกแรกมีความปลอดภัยมากกว่าและเราขอแนะนำอย่างยิ่ง
วิธีตั้งค่าตัวแปรสภาพแวดล้อม
ตั้งค่าตัวแปรสภาพแวดล้อม GOOGLE_APPLICATION_CREDENTIALS เป็นเส้นทางของไฟล์ JSON ที่มีคีย์บัญชีบริการ
ตัวแปรนี้จะมีผลกับเซสชัน Shell ปัจจุบันเท่านั้น ดังนั้นหากคุณเปิดเซสชันใหม่ ให้ตั้งค่าตัวแปรอีกครั้ง
Linux หรือ macOS
export GOOGLE_APPLICATION_CREDENTIALS="KEY_FILE_PATH"
Windows
ด้วย PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="KEY_FILE_PATH"
หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว ข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน (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
หากคุณใช้ Google Compute Engine VM กับข้อมูลรับรองเริ่มต้นของแอปพลิเคชัน Google สำหรับ Realtime Database หรือ Authentication โปรดตรวจสอบว่าได้ตั้งค่าขอบเขตการเข้าถึงที่ถูกต้องด้วย
สำหรับ Realtime Database และ Authentication คุณต้องมีขอบเขตที่ลงท้ายด้วย userinfo.email และ cloud-platform หรือ firebase.database หากต้องการตรวจสอบขอบเขตการเข้าถึงที่มีอยู่และเปลี่ยนแปลงขอบเขตดังกล่าว ให้ทำตามขั้นตอนต่อไปนี้โดยใช้ gcloud
ตรวจสอบบัญชีบริการและขอบเขตการเข้าถึงปัจจุบันของ VM โดยทำดังนี้
gcloud compute instances describe \ INSTANCE_NAME \ --format=jsonค้นหาส่วน
serviceAccountsในเอาต์พุตและจดอีเมลของบัญชีบริการไว้ เช่น{ "serviceAccounts": [ { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": [ "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/userinfo.email" ] } ] }หยุด VM แล้วอัปเดตขอบเขตการเข้าถึงโดยใช้อีเมลบัญชีบริการจากขั้นตอนก่อนหน้า
gcloud compute instances set-service-account \ INSTANCE_NAME \ --service-account "SERVICE_ACCOUNT_EMAIL" \ --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 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: 'PROJECT_ID',
});
Java
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setProjectId("PROJECT_ID")
.build();
FirebaseApp.initializeApp(options);
Python
app_options = {'projectId': 'PROJECT_ID'}
default_app = firebase_admin.initialize_app(options=app_options)
Go
config := &firebase.Config{ProjectID: "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 = "PROJECT_ID",
});
ขั้นตอนถัดไป
ดูข้อมูลเกี่ยวกับ Firebase
สำรวจซอร์สโค้ดโอเพนซอร์สใน GitHub สำหรับ Node.js, Java และ Python
อ่านบล็อกโพสต์ที่เกี่ยวข้องกับ Admin SDK โดยหนึ่งในผู้สร้าง Admin SDK ตัวอย่างเช่น การเข้าถึง Firestore และ Firebase ผ่านพร็อกซีเซิร์ฟเวอร์
เพิ่มฟีเจอร์ Firebase ลงในแอปโดยทำดังนี้
- เขียนแบ็กเอนด์แบบ Serverless ด้วย Cloud Functions
- จัดเก็บข้อมูลด้วย Realtime Database หรือข้อมูล BLOB ด้วย Cloud Storage
- รับการแจ้งเตือนด้วย Cloud Messaging