Firebase Admin SDK را به سرور خود اضافه کنید

Admin SDK مجموعه ای از کتابخانه های سرور است که به شما امکان می دهد با Firebase از محیط های ممتاز برای انجام اقداماتی مانند:

  • خواندن و نوشتن داده های Realtime Database با امتیازات کامل سرپرست.
  • با استفاده از روشی ساده و جایگزین برای پروتکل‌های سرور Firebase Cloud Messaging ، پیام‌های Firebase Cloud Messaging را برنامه‌ریزی کنید.
  • توکن های تأیید اعتبار Firebase را ایجاد و تأیید کنید.
  • به منابع Google Cloud مانند سطل‌های Cloud Storage و پایگاه‌های داده Cloud Firestore مرتبط با پروژه‌های Firebase خود دسترسی پیدا کنید.
  • برای انجام کارهایی مانند جستجوی اطلاعات کاربر یا تغییر آدرس ایمیل کاربر برای احراز هویت، کنسول مدیریت ساده شده خود را ایجاد کنید.

اگر علاقه مند به استفاده از Node.js SDK به عنوان یک کلاینت برای دسترسی کاربر نهایی هستید (مثلاً در دسکتاپ Node.js یا برنامه IoT)، بر خلاف دسترسی ادمین از یک محیط ممتاز (مانند سرور)، شما در عوض باید دستورالعمل‌های راه‌اندازی سرویس گیرنده جاوا اسکریپت SDK را دنبال کنید.

در اینجا یک ماتریس ویژگی وجود دارد که نشان می دهد چه ویژگی های Firebase در هر زبان پشتیبانی می شود:

ویژگی Node.js جاوا پایتون برو سی شارپ
ضرب توکن سفارشی
تایید شناسه رمز
مدیریت کاربر
کنترل دسترسی با ادعاهای سفارشی
Refresh Token Revocation
وارد کردن کاربران
مدیریت کوکی جلسه
ایجاد پیوندهای اکشن ایمیل
مدیریت پیکربندی های ارائه دهنده SAML/OIDC
پشتیبانی چند اجاره ای
Realtime Database *
Firebase Cloud Messaging
FCM Multicast
اشتراک های موضوع FCM را مدیریت کنید
Cloud Storage
Cloud Firestore
توابع را با وظایف Cloud در صف قرار دهید
مدیریت پروژه
قوانین امنیتی
مدیریت مدل ML
Firebase Remote Config
Firebase App Check
Firebase Extensions

برای کسب اطلاعات بیشتر در مورد ادغام Admin SDK برای این کاربردها، به Realtime Database ، FCM ، Authentication ، Remote Config و اسناد Cloud Storage مربوطه مراجعه کنید. بقیه این صفحه بر روی تنظیمات اولیه برای Admin SDK تمرکز دارد.

پیش نیازها

  • مطمئن شوید که یک برنامه سرور دارید.

  • مطمئن شوید که سرور شما بسته به اینکه از کدام Admin SDK استفاده می‌کنید موارد زیر را اجرا کند:

    • Admin Node.js SDK — Node.js 14+ (توصیه Node.js 18+)
      پشتیبانی Node.js 14 و 16 منسوخ شده است.
    • Admin Java SDK — Java 8+
    • Admin Python SDK — Python 3.7+ (Python 3.8+ را توصیه می کنیم)
      پشتیبانی از پایتون 3.7 منسوخ شده است.
    • Admin Go SDK — Go 1.20+
    • Admin.NET SDK — .NET Framework 4.6.2+ یا NET Standard 2.0 برای NET 6.0+

یک پروژه Firebase و حساب سرویس راه اندازی کنید

برای استفاده از Firebase Admin SDK ، به موارد زیر نیاز دارید:

  • پروژه Firebase
  • یک حساب سرویس Firebase Admin SDK برای ارتباط با Firebase. هنگامی که یک پروژه Firebase ایجاد می کنید یا Firebase را به پروژه Google Cloud اضافه می کنید، این حساب سرویس به طور خودکار ایجاد می شود.
  • یک فایل پیکربندی با اعتبار حساب سرویس شما.

اگر قبلاً پروژه Firebase ندارید، باید آن را در کنسول Firebase ایجاد کنید. برای کسب اطلاعات بیشتر در مورد پروژه های Firebase، از Understand Firebase Projects دیدن کنید.

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 :

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

اگر از ES2015 استفاده می کنید، می توانید ماژول را import :

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

جاوا

Firebase Admin Java SDK در مخزن مرکزی Maven منتشر شده است. برای نصب کتابخانه، آن را به عنوان یک وابستگی در فایل build.gradle خود اعلام کنید:

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

اگر از Maven برای ساخت برنامه خود استفاده می کنید، می توانید وابستگی زیر را به pom.xml خود اضافه کنید:

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

پایتون

Firebase Admin Python SDK از طریق pip در دسترس است. شما می توانید کتابخانه را برای همه کاربران از طریق sudo نصب کنید:

sudo pip install firebase-admin

یا، می توانید کتابخانه را فقط برای کاربر فعلی با عبور دادن پرچم --user نصب کنید:

pip install --user firebase-admin

برو

Go Admin SDK را می توان با استفاده از ابزار 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.14.1

سی شارپ

NET Admin SDK می توان با استفاده از مدیر بسته دات نت نصب کرد:

Install-Package FirebaseAdmin -Version 3.0.1

همچنین، آن را با استفاده از ابزار خط فرمان dotnet نصب کنید:

dotnet add package FirebaseAdmin --version 3.0.1

یا، می توانید آن را با افزودن ورودی مرجع بسته زیر به فایل .csproj خود نصب کنید:

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

SDK را راه اندازی کنید

هنگامی که یک پروژه Firebase ایجاد کردید، می‌توانید SDK را با اعتبارنامه پیش‌فرض Google Application مقداردهی اولیه کنید. از آنجایی که جستجوی اعتبار پیش‌فرض در محیط‌های Google کاملاً خودکار است و نیازی به ارائه متغیرهای محیطی یا تنظیمات دیگر نیست، این روش اولیه‌سازی SDK به شدت برای برنامه‌هایی که در محیط‌های Google اجرا می‌شوند مانند Cloud Run، App Engine و Cloud Functions توصیه می‌شود.

برای تعیین اختیاری گزینه های مقداردهی اولیه برای سرویس هایی مانند Realtime Database ، Cloud Storage ، یا Cloud Functions ، از متغیر محیطی FIREBASE_CONFIG استفاده کنید. اگر محتوای متغیر FIREBASE_CONFIG با یک { شروع شود، به عنوان یک شی JSON تجزیه خواهد شد. در غیر این صورت SDK فرض می کند که رشته مسیر یک فایل JSON حاوی گزینه ها است.

Node.js

const app = initializeApp();

جاوا

FirebaseApp.initializeApp();

پایتون

default_app = firebase_admin.initialize_app()

برو

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

سی شارپ

FirebaseApp.Create();

پس از تنظیم اولیه، می توانید از 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'
});

جاوا

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);

پایتون

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

برو

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)
}

سی شارپ

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("path/to/refreshToken.json"),
});

SDK را در محیط های غیر Google راه اندازی کنید

اگر در یک محیط سرور غیر Google کار می‌کنید که در آن جستجوی اعتبارنامه‌های پیش‌فرض نمی‌تواند کاملاً خودکار باشد، می‌توانید SDK را با یک فایل کلید حساب سرویس صادر شده مقداردهی کنید.

پروژه‌های Firebase از حساب‌های سرویس Google پشتیبانی می‌کنند که می‌توانید از آنها برای فراخوانی APIهای سرور Firebase از سرور برنامه یا محیط مورد اعتماد خود استفاده کنید. اگر در حال توسعه کد به صورت محلی یا نصب برنامه خود در محل هستید، می توانید از اعتبارنامه های به دست آمده از طریق این حساب سرویس برای تأیید درخواست های سرور استفاده کنید.

برای احراز هویت یک حساب سرویس و اجازه دسترسی به خدمات Firebase، باید یک فایل کلید خصوصی با فرمت JSON ایجاد کنید.

برای ایجاد یک فایل کلید خصوصی برای حساب سرویس خود:

  1. در کنسول Firebase ، تنظیمات > حساب‌های سرویس را باز کنید.

  2. روی Generate New Private Key کلیک کنید، سپس با کلیک روی Generate Key تأیید کنید.

  3. فایل JSON حاوی کلید را ایمن ذخیره کنید.

هنگام مجوز دادن از طریق یک حساب سرویس، دو انتخاب برای ارائه اعتبارنامه به برنامه خود دارید. می‌توانید متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را تنظیم کنید، یا می‌توانید مسیر کلید حساب سرویس را به صورت واضح در کد ارسال کنید. گزینه اول امن تر است و به شدت توصیه می شود.

برای تنظیم متغیر محیطی:

متغیر محیطی GOOGLE_APPLICATION_CREDENTIALS را روی مسیر فایل فایل JSON که حاوی کلید حساب سرویس شما است، تنظیم کنید. این متغیر فقط برای جلسه پوسته فعلی شما اعمال می شود، بنابراین اگر جلسه جدیدی را باز کردید، متغیر را دوباره تنظیم کنید.

لینوکس یا macOS

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

ویندوز

با 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'
});

جاوا

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

FirebaseApp.initializeApp(options);

پایتون

default_app = firebase_admin.initialize_app()

برو

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

سی شارپ

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

چند برنامه را راه اندازی کنید

در بیشتر موارد، شما فقط باید یک برنامه پیش فرض را مقداردهی اولیه کنید. شما می توانید به دو روش معادل به خدمات خارج از آن برنامه دسترسی داشته باشید:

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();

جاوا

// 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();

پایتون

# 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(...)

برو

// 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)
}

سی شارپ

// 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 را بخوانید و توکن‌های سفارشی را برای پروژه دیگری برش دهید. یا ممکن است بخواهید دو برنامه را با اعتبار جداگانه احراز هویت کنید. 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);

جاوا

// 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);

پایتون

# 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)

برو

// 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)
}

سی شارپ

// 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 با اعتبارنامه پیش‌فرض برنامه Google برای 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 را با استفاده از شناسه مشتری OAuth 2.0 خود در gcloud ایجاد کنید. شناسه مشتری OAuth باید یک نوع برنامه کاربردی دسکتاپ باشد.

gcloud

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

می‌توانید شناسه پروژه را به صراحت در مقداردهی اولیه برنامه مشخص کنید یا فقط از متغیر محیطی GOOGLE_CLOUD_PROJECT استفاده کنید. دومی از نیاز به ایجاد هرگونه تغییر اضافی برای آزمایش کد خود جلوگیری می کند.

برای تعیین صریح ID پروژه:

Node.js

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

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

جاوا

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

FirebaseApp.initializeApp(options);

پایتون

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

برو

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)
}

سی شارپ

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

مراحل بعدی

درباره Firebase بیاموزید:

ویژگی های Firebase را به برنامه خود اضافه کنید: