Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

কাস্টম টোকেন তৈরি করুন

ফায়ারবেস আপনাকে নিরাপদ JSON ওয়েব টোকেন (JWTs) ব্যবহার করে ব্যবহারকারী বা ডিভাইসগুলিকে প্রমাণীকরণের অনুমতি দিয়ে প্রমাণীকরণের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। আপনি আপনার সার্ভারে এই টোকেন জেনারেট করেন, তাদের ফিরিয়ে একটি ক্লায়েন্ট ডিভাইস পাস, এবং তারপর মাধ্যমে এ প্রমাণীকৃত করতে তাদের ব্যবহার signInWithCustomToken() পদ্ধতি।

এটি অর্জনের জন্য, আপনাকে অবশ্যই একটি সার্ভার এন্ডপয়েন্ট তৈরি করতে হবে যা সাইন-ইন শংসাপত্রগুলি গ্রহণ করে-যেমন একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড-এবং, যদি শংসাপত্রগুলি বৈধ হয়, একটি কাস্টম JWT প্রদান করে। আপনার সার্ভার থেকে ফিরে কাস্টম JWT তারপর Firebase (সহ প্রমাণীকরণ একটি ক্লায়েন্ট ডিভাইস দ্বারা ব্যবহার করা যেতে পারে আইওএস , অ্যান্ড্রয়েড , ওয়েব )। একবার প্রমাণিত হয়ে গেলে, এই পরিচয়টি ফায়ারবেস রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজের মতো অন্যান্য ফায়ারবেস পরিষেবাগুলি অ্যাক্সেস করার সময় ব্যবহার করা হবে। তদ্ব্যতীত, JWT বিষয়বস্তু উপলব্ধ হবে auth আপনার বস্তুর রিয়েলটাইম ডাটাবেস বিধি এবং request.auth আপনার বস্তুর ক্লাউড স্টোরেজ সিকিউরিটি রুলস

আপনি ফায়ারবেস অ্যাডমিন এসডিকে দিয়ে একটি কাস্টম টোকেন তৈরি করতে পারেন, অথবা যদি আপনার সার্ভার এমন ভাষায় লেখা হয় যা ফায়ারবেস স্থানীয়ভাবে সমর্থন করে না তবে আপনি একটি তৃতীয় পক্ষের জেডব্লিউটি লাইব্রেরি ব্যবহার করতে পারেন।

তুমি শুরু করার আগে

কাস্টম টোকেনগুলি জেডব্লিউটি -তে স্বাক্ষরিত হয় যেখানে স্বাক্ষর করার জন্য ব্যবহৃত ব্যক্তিগত কী একটি Google পরিষেবা অ্যাকাউন্টের অন্তর্গত। কাস্টম টোকেন স্বাক্ষরের জন্য ফায়ারবেস অ্যাডমিন এসডিকে ব্যবহার করা উচিত এমন Google পরিষেবা অ্যাকাউন্ট নির্দিষ্ট করার বিভিন্ন উপায় রয়েছে:

  • একটি সেবা অ্যাকাউন্ট JSON ফাইল ব্যবহার - এই পদ্ধতি কোন পরিবেশে ব্যবহার করা যেতে পারে, কিন্তু আপনার কোড সহ একটি সেবা অ্যাকাউন্ট JSON ফাইল প্যাকেজ করতে হবে। পরিষেবা অ্যাকাউন্ট JSON ফাইল বাহ্যিক পক্ষের কাছে উন্মুক্ত না হয় তা নিশ্চিত করার জন্য বিশেষ যত্ন নিতে হবে।
  • এডমিন SDK এর একটি সেবা অ্যাকাউন্ট আবিষ্কার লেটিং - এই পদ্ধতি যেমন Google মেঘ কার্যাবলী এবং App ইঞ্জিন হিসাবে Google দ্বারা পরিচালিত পরিবেশের মধ্যে ব্যবহার করা যাবে। আপনাকে গুগল ক্লাউড কনসোলের মাধ্যমে কিছু অতিরিক্ত অনুমতি কনফিগার করতে হতে পারে।
  • একটি সেবা অ্যাকাউন্ট ID ব্যবহার - যখন একটি Google-পরিচালিত পরিবেশে ব্যবহার এই পদ্ধতি নিদিষ্ট সেবা অ্যাকাউন্টের কী ব্যবহার করে টোকেন সাইন ইন করবেন। যাইহোক, এটি একটি দূরবর্তী ওয়েব পরিষেবা ব্যবহার করে, এবং আপনাকে Google ক্লাউড কনসোলের মাধ্যমে এই পরিষেবা অ্যাকাউন্টের জন্য অতিরিক্ত অনুমতি কনফিগার করতে হতে পারে।

একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল ব্যবহার করে

পরিষেবা অ্যাকাউন্ট JSON ফাইলগুলিতে পরিষেবা অ্যাকাউন্টগুলির সাথে সম্পর্কিত সমস্ত তথ্য রয়েছে (RSA ব্যক্তিগত কী সহ)। এগুলি ফায়ারবেস কনসোল থেকে ডাউনলোড করা যায়। অনুসরণ এডমিন SDK এর নির্দেশাবলী সেট আপ কিভাবে পরিষেবা অ্যাকাউন্ট JSON ফাইল সঙ্গে অ্যাডমিন SDK এর আরম্ভ করতে আরও তথ্যের জন্য।

আরম্ভের এই পদ্ধতিটি অ্যাডমিন এসডিকে মোতায়েনের বিস্তৃত জন্য উপযুক্ত। এছাড়াও এটি অ্যাডমিন এসডিকে কোন দূরবর্তী API কল না করে স্থানীয়ভাবে কাস্টম টোকেন তৈরি এবং স্বাক্ষর করতে সক্ষম করে। এই পদ্ধতির প্রধান অসুবিধা হল যে এটি আপনার কোড সহ একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল প্যাকেজ করতে হবে। এছাড়াও মনে রাখবেন যে একটি পরিষেবা অ্যাকাউন্ট JSON ফাইলের ব্যক্তিগত কী সংবেদনশীল তথ্য, এবং এটি গোপন রাখার জন্য বিশেষ যত্ন নেওয়া আবশ্যক। বিশেষ করে, পাবলিক ভার্সন কন্ট্রোলে সার্ভিস অ্যাকাউন্ট JSON ফাইল যোগ করা থেকে বিরত থাকুন।

অ্যাডমিন এসডিকে একটি পরিষেবা অ্যাকাউন্ট আবিষ্কার করতে দেওয়া

যদি আপনার কোড গুগল দ্বারা পরিচালিত পরিবেশে স্থাপন করা হয়, তাহলে অ্যাডমিন এসডিকে কাস্টম টোকেনগুলিতে স্বাক্ষর করার উপায় স্বয়ংক্রিয়ভাবে আবিষ্কার করার চেষ্টা করতে পারে:

  • আপনার কোড জাভা, পাইথন বা যেতে জন্য App ইঞ্জিন মান পরিবেশে মোতায়েন করা হয়, তাহলে অ্যাডমিন SDK এর ব্যবহার করতে পারেন অ্যাপ পরিচয় সেবা কাস্টম টোকেন সাইন ইন করতে পরিবেশ উপস্থিত রয়েছে। অ্যাপ আইডেন্টিটি পরিষেবা Google অ্যাপ ইঞ্জিন দ্বারা আপনার অ্যাপের জন্য বিধানিত পরিষেবা অ্যাকাউন্ট ব্যবহার করে ডেটা স্বাক্ষর করে।

  • আপনার কোড কিছু অন্যান্য পরিচালিত পরিবেশ (যেমন Google মেঘ কার্যাবলী, গুগল কম্পিউট ইঞ্জিন) এ মোতায়েন করা হয়, তাহলে Firebase এডমিন SDK এর স্থানীয়রূপে থেকে কোনো পরিষেবা অ্যাকাউন্ট ID স্ট্রিং কে অটো আবিষ্কার মেটাডেটা সার্ভার । আবিষ্কৃত সার্ভিস একাউন্ট আইডি তারপর আইএএম সার্ভিসের সাথে দূরবর্তীভাবে টোকেন সাইন করার জন্য ব্যবহার করা হয়।

এই স্বাক্ষর পদ্ধতি ব্যবহার করার জন্য, Google অ্যাপ্লিকেশন ডিফল্ট শংসাপত্রের সাথে SDK আরম্ভ করুন এবং একটি পরিষেবা অ্যাকাউন্ট আইডি স্ট্রিং নির্দিষ্ট করবেন না:

Node.js

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

স্থানীয়ভাবে একই কোড পরীক্ষা করার জন্য, একটি পরিষেবা অ্যাকাউন্ট JSON ফাইল ডাউনলোড করুন সেট GOOGLE_APPLICATION_CREDENTIALS এটি বিন্দু এনভায়রনমেন্ট ভেরিয়েবল।

যদি ফায়ারবেস অ্যাডমিন এসডিকে একটি পরিষেবা অ্যাকাউন্ট আইডি স্ট্রিং আবিষ্কার করতে হয়, এটি তখনই করে যখন আপনার কোডটি প্রথমবার একটি কাস্টম টোকেন তৈরি করে। ফলাফলটি ক্যাশে করা হয় এবং পরবর্তী টোকেন স্বাক্ষর কার্যক্রমের জন্য পুনরায় ব্যবহার করা হয়। স্বয়ংক্রিয়ভাবে আবিষ্কৃত পরিষেবা অ্যাকাউন্ট আইডি সাধারণত Google ক্লাউড দ্বারা প্রদত্ত ডিফল্ট পরিষেবা অ্যাকাউন্টগুলির মধ্যে একটি:

শুধু স্পষ্টভাবে উল্লেখিত পরিষেবা অ্যাকাউন্ট ID- র মতো, স্বয়ংক্রিয় discoverd পরিষেবা অ্যাকাউন্ট ID- র থাকতে হবে iam.serviceAccounts.signBlob কাজ কাস্টম টোকেন সৃষ্টির জন্য অনুমতি। আপনি ব্যবহার করতে পারেন IAM এবং প্রশাসক ডিফল্ট সেবা অ্যাকাউন্ট প্রয়োজনীয় অনুমতি প্রদান করার জন্য Google মেঘ কনসোল বিভাগে। আরো বিস্তারিত জানার জন্য নীচের সমস্যা সমাধান বিভাগ দেখুন।

একটি পরিষেবা অ্যাকাউন্ট আইডি ব্যবহার করে

আপনার আবেদনের বিভিন্ন অংশের মধ্যে সামঞ্জস্য বজায় রাখার জন্য, আপনি একটি পরিষেবা অ্যাকাউন্ট আইডি নির্দিষ্ট করতে পারেন যার কীগুলি গুগল-পরিচালিত পরিবেশে চলার সময় টোকেনগুলিতে স্বাক্ষর করতে ব্যবহৃত হবে। এটি আইএএম নীতিগুলিকে সহজ এবং আরও সুরক্ষিত করতে পারে এবং পরিষেবা কোড JSON ফাইলটি আপনার কোডে অন্তর্ভুক্ত করা এড়াতে পারে।

সেবা অ্যাকাউন্ট ID খুঁজে পাওয়া যেতে পারে Google ক্লাউড কনসোলে , অথবা client_email একটি ডাউনলোড করা পরিষেবা অ্যাকাউন্ট JSON ফাইল ক্ষেত্রে। পরিষেবা অ্যাকাউন্ট ID- র ইমেল ঠিকানাগুলি আছে নিম্নলিখিত বিন্যাসে আছেন: <client-id>@<project-id>.iam.gserviceaccount.com । তারা অনন্যভাবে ফায়ারবেস এবং গুগল ক্লাউড প্রকল্পগুলিতে পরিষেবা অ্যাকাউন্টগুলি সনাক্ত করে।

একটি পৃথক পরিষেবা অ্যাকাউন্ট আইডি ব্যবহার করে কাস্টম টোকেন তৈরি করতে, নীচে দেখানো হিসাবে SDK আরম্ভ করুন:

Node.js

initializeApp({
  serviceAccountId: 'my-client-id@my-project-id.iam.gserviceaccount.com',
});

জাভা

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setServiceAccountId("my-client-id@my-project-id.iam.gserviceaccount.com")
    .build();
FirebaseApp.initializeApp(options);

পাইথন

options = {
    'serviceAccountId': 'my-client-id@my-project-id.iam.gserviceaccount.com',
}
firebase_admin.initialize_app(options=options)

যাওয়া

conf := &firebase.Config{
	ServiceAccountID: "my-client-id@my-project-id.iam.gserviceaccount.com",
}
app, err := firebase.NewApp(context.Background(), conf)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

সি#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
    ServiceAccountId = "my-client-id@my-project-id.iam.gserviceaccount.com",
});

পরিষেবা অ্যাকাউন্ট আইডিগুলি সংবেদনশীল তথ্য নয় এবং তাই তাদের এক্সপোজার অসঙ্গতিপূর্ণ। যাইহোক, নির্দিষ্ট পরিষেবা অ্যাকাউন্টের সাথে কাস্টম টোকেনগুলিতে স্বাক্ষর করার জন্য, Firebase অ্যাডমিন এসডিকে অবশ্যই একটি দূরবর্তী পরিষেবা চালু করতে হবে। তাছাড়া, এছাড়াও আপনি নিশ্চিত পরিষেবা অ্যাকাউন্ট যে এডমিন SDK এর এই কলে -usually করতে ব্যবহার করা হয় করতে হবে {project-name}@appspot.gserviceaccount.com - হয়েছে iam.serviceAccounts.signBlob অনুমতি । আরো বিস্তারিত জানার জন্য নীচের সমস্যা সমাধান বিভাগ দেখুন।

Firebase Admin SDK ব্যবহার করে কাস্টম টোকেন তৈরি করুন

কাস্টম টোকেন তৈরির জন্য Firebase অ্যাডমিন এসডিকে একটি অন্তর্নির্মিত পদ্ধতি রয়েছে। কমপক্ষে, আপনি একটি প্রদান করতে uid , যা কোন স্ট্রিং হতে পারে কিন্তু স্বতন্ত্র ব্যবহারকারী বা আপনি যে ডিভাইসটি অনুমোদন করা হয় চিহ্নিত করা হয়। এই টোকেনগুলো এক ঘণ্টা পর শেষ হয়ে যায়।

Node.js

const uid = 'some-uid';

getAuth()
  .createCustomToken(uid)
  .then((customToken) => {
    // Send token back to client
  })
  .catch((error) => {
    console.log('Error creating custom token:', error);
  });

জাভা

String uid = "some-uid";

String customToken = FirebaseAuth.getInstance().createCustomToken(uid);
// Send token back to client

পাইথন

uid = 'some-uid'

custom_token = auth.create_custom_token(uid)

যাওয়া

client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

token, err := client.CustomToken(ctx, "some-uid")
if err != nil {
	log.Fatalf("error minting custom token: %v\n", err)
}

log.Printf("Got custom token: %v\n", token)

সি#

var uid = "some-uid";

string customToken = await FirebaseAuth.DefaultInstance.CreateCustomTokenAsync(uid);
// Send token back to client

আপনি কাস্টম টোকেনে অন্তর্ভুক্ত করার জন্য অতিরিক্ত দাবিও optionচ্ছিকভাবে উল্লেখ করতে পারেন। উদাহরণ হিসেবে বলা যায়, নিচে, একটি premiumAccount ক্ষেত্র কাস্টম টোকেন, যা পাওয়া যাবে যোগ করা হয়েছে auth / request.auth আপনার নিরাপত্তা বিধি বস্তু:

Node.js

const userId = 'some-uid';
const additionalClaims = {
  premiumAccount: true,
};

getAuth()
  .createCustomToken(userId, additionalClaims)
  .then((customToken) => {
    // Send token back to client
  })
  .catch((error) => {
    console.log('Error creating custom token:', error);
  });

জাভা

String uid = "some-uid";
Map<String, Object> additionalClaims = new HashMap<String, Object>();
additionalClaims.put("premiumAccount", true);

String customToken = FirebaseAuth.getInstance()
    .createCustomToken(uid, additionalClaims);
// Send token back to client

পাইথন

uid = 'some-uid'
additional_claims = {
    'premiumAccount': True
}

custom_token = auth.create_custom_token(uid, additional_claims)

যাওয়া

client, err := app.Auth(context.Background())
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

claims := map[string]interface{}{
	"premiumAccount": true,
}

token, err := client.CustomTokenWithClaims(ctx, "some-uid", claims)
if err != nil {
	log.Fatalf("error minting custom token: %v\n", err)
}

log.Printf("Got custom token: %v\n", token)

সি#

var uid = "some-uid";
var additionalClaims = new Dictionary<string, object>()
{
    { "premiumAccount", true },
};

string customToken = await FirebaseAuth.DefaultInstance
    .CreateCustomTokenAsync(uid, additionalClaims);
// Send token back to client

ক্লায়েন্টদের কাস্টম টোকেন ব্যবহার করে সাইন ইন করুন

আপনি একটি কাস্টম টোকেন তৈরি করার পরে, আপনার এটি আপনার ক্লায়েন্ট অ্যাপে পাঠানো উচিত। কাস্টম সঙ্গে ক্লায়েন্ট অ্যাপ্লিকেশন অনুমোদন কলিং টোকেনটি signInWithCustomToken() :

আইওএস

উদ্দেশ্য গ
[[FIRAuth auth] signInWithCustomToken:customToken
                           completion:^(FIRAuthDataResult * _Nullable authResult,
                                        NSError * _Nullable error) {
  // ...
}];
সুইফট
Auth.auth().signIn(withCustomToken: customToken ?? "") { user, error in
  // ...
}

অ্যান্ড্রয়েড

mAuth.signInWithCustomToken(mCustomToken)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCustomToken:success");
                    FirebaseUser user = mAuth.getCurrentUser();
                    updateUI(user);
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithCustomToken:failure", task.getException());
                    Toast.makeText(CustomAuthActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    updateUI(null);
                }
            }
        });

Unক্য

auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("SignInWithCustomTokenAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception);
    return;
  }

  Firebase.Auth.FirebaseUser newUser = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      newUser.DisplayName, newUser.UserId);
});

সি ++

firebase::Future<firebase::auth::User*> result =
    auth->SignInWithCustomToken(custom_token);

ওয়েব

firebase.auth().signInWithCustomToken(token)
  .then((userCredential) => {
    // Signed in
    var user = userCredential.user;
    // ...
  })
  .catch((error) => {
    var errorCode = error.code;
    var errorMessage = error.message;
    // ...
  });

প্রমাণীকরণ সফল হলে, আপনার ব্যবহারকারী এখন দ্বারা নির্দিষ্ট অ্যাকাউন্টের সাথে আপনার ক্লায়েন্ট অ্যাপ্লিকেশন মধ্যে সাইন ইন করতে হবে uid কাস্টম টোকেন অন্তর্ভুক্ত করা হয়েছে। যদি সেই অ্যাকাউন্টটি আগে না থাকে, তাহলে সেই ব্যবহারকারীর জন্য একটি রেকর্ড তৈরি করা হবে।

সঙ্গে অন্যান্য সাইন-ইন পদ্ধতি (যেমন হিসাবে একই ভাবে signInWithEmailAndPassword() এবং signInWithCredential() ) auth আপনার বস্তুর রিয়েলটাইম ডাটাবেস বিধি এবং request.auth আপনার বস্তুর ক্লাউড স্টোরেজ সিকিউরিটি রুলস ব্যবহারকারীর সঙ্গে পূরণ করা হবে uid । এই ক্ষেত্রে, uid এক হতে হবে যে আপনি নিদিষ্ট যখন কাস্টম টোকেন জেনারেট করার।

ডাটাবেসের নিয়ম

{
  "rules": {
    "adminContent": {
      ".read": "auth.uid === 'some-uid'"
    }
  }
}

সঞ্চয়ের নিয়ম

service firebase.storage {
  match /b/<your-firebase-storage-bucket>/o {
    match /adminContent/{filename} {
      allow read, write: if request.auth != null && request.auth.uid == "some-uid";
    }
  }
}

কাস্টম টোকেন অতিরিক্ত দাবিগুলি থাকে তবে তারা বন্ধ রেফারেন্সড যাবে auth.token (Firebase রিয়েলটাইম ডাটাবেস) অথবা request.auth.token (ক্লাউড স্টোরেজ) আপনার নিয়ম বস্তু:

ডাটাবেসের নিয়ম

{
  "rules": {
    "premiumContent": {
      ".read": "auth.token.premiumAccount === true"
    }
  }
}

সঞ্চয়ের নিয়ম

service firebase.storage {
  match /b/<your-firebase-storage-bucket>/o {
    match /premiumContent/{filename} {
      allow read, write: if request.auth.token.premiumAccount == true;
    }
  }
}

তৃতীয় পক্ষের JWT লাইব্রেরি ব্যবহার করে কাস্টম টোকেন তৈরি করুন

যদি আপনার ব্যাকএন্ড এমন একটি ভাষায় থাকে যার অফিসিয়াল ফায়ারবেস অ্যাডমিন এসডিকে নেই, আপনি এখনও কাস্টম টোকেন তৈরি করতে পারেন। প্রথমত, একটি তৃতীয় পক্ষের JWT লাইব্রেরী খুঁজুন আপনার ভাষার জন্য। তারপরে, JWT লাইব্রেরিটি ব্যবহার করুন একটি JWT কে পুঙ্খানুপুঙ্খ করতে যাতে নিম্নলিখিত দাবিগুলি অন্তর্ভুক্ত রয়েছে:

কাস্টম টোকেন দাবি
alg অ্যালগরিদম "RS256"
iss ইস্যুকারী আপনার প্রকল্পের পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা
sub বিষয় আপনার প্রকল্পের পরিষেবা অ্যাকাউন্টের ইমেল ঠিকানা
aud শ্রোতা "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit"
iat ইস্যু করা-সময়ে বর্তমান সময়, UNIX যুগের পর সেকেন্ডে
exp মেয়াদ শেষ হওয়ার সময় সময়, UNIX যুগের পর সেকেন্ডে, যেখানে টোকেনের মেয়াদ শেষ হয়ে যায়। এটা তোলে 3600 সেকেন্ডের একটি সর্বোচ্চ পরে হতে পারে iat
দ্রষ্টব্য: এটি কেবলমাত্র সময় নিয়ন্ত্রণ যখন নিজেই টোকেন কাস্টম শেষ হয়ে যাবে। কিন্তু আপনি একবার ব্যবহার করে একজন ব্যবহারকারী সাইন ইন signInWithCustomToken() পর্যন্ত তাদের অধিবেশন অকার্যকর ও বাতিল হয় অথবা ব্যবহারকারীর লক্ষণ আউট, তারা ডিভাইসের মধ্যে সাইন ইন থাকবে।
uid সাইন-ইন করা ব্যবহারকারীর অনন্য শনাক্তকারী একটি স্ট্রিং হতে হবে, যার মধ্যে 1-36 অক্ষর দীর্ঘ হতে হবে
claims (ঐচ্ছিক) ঐচ্ছিক কাস্টম দাবি সিকিউরিটি রুলস অন্তর্ভুক্ত করতে auth / request.auth ভেরিয়েবল

ফায়ারবেস অ্যাডমিন এসডিকে সমর্থন করে না এমন বিভিন্ন ভাষায় কীভাবে কাস্টম টোকেন তৈরি করা যায় তার কিছু উদাহরণ বাস্তবায়ন এখানে দেওয়া হল:

পিএইচপি

ব্যবহার php-jwt :

// Requires: composer require firebase/php-jwt
use Firebase\JWT\JWT;

// Get your service account's email address and private key from the JSON key file
$service_account_email = "abc-123@a-b-c-123.iam.gserviceaccount.com";
$private_key = "-----BEGIN PRIVATE KEY-----...";

function create_custom_token($uid, $is_premium_account) {
  global $service_account_email, $private_key;

  $now_seconds = time();
  $payload = array(
    "iss" => $service_account_email,
    "sub" => $service_account_email,
    "aud" => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
    "iat" => $now_seconds,
    "exp" => $now_seconds+(60*60),  // Maximum expiration time is one hour
    "uid" => $uid,
    "claims" => array(
      "premium_account" => $is_premium_account
    )
  );
  return JWT::encode($payload, $private_key, "RS256");
}

রুবি

ব্যবহার ruby-jwt :

require "jwt"

# Get your service account's email address and private key from the JSON key file
$service_account_email = "service-account@my-project-abc123.iam.gserviceaccount.com"
$private_key = OpenSSL::PKey::RSA.new "-----BEGIN PRIVATE KEY-----\n..."

def create_custom_token(uid, is_premium_account)
  now_seconds = Time.now.to_i
  payload = {:iss => $service_account_email,
             :sub => $service_account_email,
             :aud => "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
             :iat => now_seconds,
             :exp => now_seconds+(60*60), # Maximum expiration time is one hour
             :uid => uid,
             :claims => {:premium_account => is_premium_account}}
  JWT.encode payload, $private_key, "RS256"
end

আপনি কাস্টম টোকেন তৈরি করার পরে, ফায়ারবেস দিয়ে প্রমাণীকরণের জন্য এটি আপনার ক্লায়েন্ট অ্যাপে পাঠান। এটি কীভাবে করবেন তার জন্য উপরের কোডের নমুনা দেখুন।

সমস্যা সমাধান

এই বিভাগটি কাস্টম টোকেন তৈরির সময় বিকাশকারীদের সম্মুখীন হতে পারে এমন কিছু সাধারণ সমস্যার রূপরেখা এবং সেগুলি কীভাবে সমাধান করা যায়।

IAM API সক্ষম নয়

আপনি যদি টোকেন স্বাক্ষরের জন্য একটি পরিষেবা অ্যাকাউন্ট আইডি নির্দিষ্ট করে থাকেন তাহলে আপনি নিচের মত একটি ত্রুটি পেতে পারেন:

Identity and Access Management (IAM) API has not been used in project
1234567890 before or it is disabled. Enable it by visiting
https://console.developers.google.com/apis/api/iam.googleapis.com/overview?project=1234567890
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

Firebase এডমিন SDK এর ব্যবহার IAM এপিআই চিহ্ন টোকেন করতে। এই ত্রুটিটি ইঙ্গিত করে যে IAM API বর্তমানে আপনার Firebase প্রকল্পের জন্য সক্ষম নয়। একটি ওয়েব ব্রাউজারে ত্রুটি বার্তার লিঙ্কটি খুলুন এবং আপনার প্রকল্পের জন্য এটি সক্ষম করতে "API সক্ষম করুন" বোতামে ক্লিক করুন।

পরিষেবা অ্যাকাউন্টের প্রয়োজনীয় অনুমতি নেই

পরিষেবা অ্যাকাউন্ট Firebase এডমিন SDK এর নেই যেমন চলতে থাকে তবে দয়া iam.serviceAccounts.signBlob অনুমতি, আপনি নিচের মত একটি ত্রুটির বার্তা পেতে পারেন:

Permission iam.serviceAccounts.signBlob is required to perform this operation
on service account projects/-/serviceAccounts/{your-service-account-id}.

এই সমাধান করার সবচেয়ে সহজ উপায় প্রশ্নে সেবা অ্যাকাউন্টে "পরিষেবা অ্যাকাউন্ট টোকেন সৃষ্টিকর্তা" IAM ভূমিকা দান করা হয়, সাধারণত {project-name}@appspot.gserviceaccount.com :

  1. খুলুন IAM এবং প্রশাসক Google মেঘ কনসোলে পাতা।
  2. আপনার প্রকল্প নির্বাচন করুন এবং "চালিয়ে যান" ক্লিক করুন।
  3. আপনি যে পরিষেবা অ্যাকাউন্টটি আপডেট করতে চান তার সাথে সম্পর্কিত সম্পাদনা আইকনে ক্লিক করুন।
  4. "আরেকটি ভূমিকা যোগ করুন" এ ক্লিক করুন।
  5. সার্চ ফিল্টারে "সার্ভিস অ্যাকাউন্ট টোকেন ক্রিয়েটর" টাইপ করুন এবং ফলাফল থেকে এটি নির্বাচন করুন।
  6. ভূমিকা অনুদান নিশ্চিত করতে "সংরক্ষণ করুন" ক্লিক করুন।

পড়ুন IAM ডকুমেন্টেশন , এই প্রক্রিয়া আরও বিশদের জন্য বা gcloud কম্যান্ড-লাইন সরঞ্জাম ব্যবহার আপডেটের ভূমিকা কি হয় তা জানুন।

পরিষেবা অ্যাকাউন্ট নির্ধারণ করতে ব্যর্থ

আপনি যদি নিচের মত একটি ত্রুটি বার্তা পান, তাহলে Firebase অ্যাডমিন SDK সঠিকভাবে আরম্ভ করা হয়নি।

Failed to determine service account ID. Initialize the SDK with service account
credentials or specify a service account ID with iam.serviceAccounts.signBlob
permission.

যদি আপনি একটি পরিষেবা অ্যাকাউন্ট আইডি স্বয়ংক্রিয়ভাবে আবিষ্কার করতে SDK- এর উপর নির্ভর করেন, তাহলে নিশ্চিত করুন যে কোডটি একটি মেটাডেটা সার্ভারের সাহায্যে একটি পরিচালিত Google পরিবেশে স্থাপন করা হয়েছে। অন্যথায়, SDK প্রারম্ভে পরিষেবা অ্যাকাউন্ট JSON ফাইল বা পরিষেবা অ্যাকাউন্ট আইডি উল্লেখ করতে ভুলবেন না।