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

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

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

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

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

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

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

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

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

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

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

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

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

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

এই সাইনিং পদ্ধতিগুলি ব্যবহার করতে, 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 এটি বিন্দু এনভায়রনমেন্ট ভেরিয়েবল।

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

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

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

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

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

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

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

Firebase অ্যাডমিন SDK-তে কাস্টম টোকেন তৈরি করার জন্য একটি অন্তর্নির্মিত পদ্ধতি রয়েছে। কমপক্ষে, আপনি একটি প্রদান করতে 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

কাস্টম টোকেনে অন্তর্ভুক্ত করার জন্য আপনি ঐচ্ছিকভাবে অতিরিক্ত দাবিগুলিও নির্দিষ্ট করতে পারেন। উদাহরণ হিসেবে বলা যায়, নিচে, একটি 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() :

iOS+

উদ্দেশ্য গ
[[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);
                }
            }
        });

ঐক্য

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 লাইব্রেরি ব্যবহার করে কাস্টম টোকেন তৈরি করুন

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

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

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

পিএইচপি

ব্যবহার 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

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

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

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

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 প্রকল্পের জন্য সক্ষম করা নেই। একটি ওয়েব ব্রাউজারে ত্রুটি বার্তার লিঙ্কটি খুলুন এবং আপনার প্রকল্পের জন্য এটি সক্ষম করতে "এপিআই সক্ষম করুন" বোতামটি ক্লিক করুন৷

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

পরিষেবা অ্যাকাউন্ট 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 ফাইল বা পরিষেবা অ্যাকাউন্ট আইডি নির্দিষ্ট করতে ভুলবেন না।