ব্যবহারকারীদের ম্যানেজ করা

Firebase Admin SDK, উন্নত বিশেষ অধিকার সহ আপনার Firebase Authentication ব্যবহারকারীদের ম্যানেজ করার জন্য একটি API প্রদান করে। অ্যাডমিন ব্যবহারকারী ম্যানেজমেন্ট API আপনাকে সুরক্ষিত সার্ভার এনভায়রনমেন্ট থেকে নিম্নলিখিত কাজগুলি প্রোগ্র্যামাটিক উপায়ে সম্পূর্ণ করার ক্ষমতা দেয়:

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

শুরু করার আগে

Firebase Admin SDK-এর দেওয়া ব্যবহারকারী ম্যানেজমেন্ট API ব্যবহার করতে হলে, আপনার অবশ্যই একটি পরিষেবা অ্যাকাউন্ট থাকতে হবে। Admin SDK কীভাবে চালু করতে হয় সেই সম্পর্কে আরও তথ্য পেতে, সেট-আপ সংক্রান্ত নির্দেশাবলী অনুসরণ করুন।

ব্যবহারকারীর ডেটা ফিরিয়ে আনা

ব্যবহারকারীকে শনাক্ত করার প্রধান উপায় হল তার uid, যা হল সেই ব্যবহারকারীর জন্য অনন্য শনাক্তকারী। Admin SDK এমন একটি পদ্ধতি প্রদান করে যা ব্যবহারকারীদের uid-এর মাধ্যমে তাদের প্রোফাইল তথ্য সংগ্রহ করতে দেয়:

Node.js

getAuth()
  .getUser(uid)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

জাভা

UserRecord userRecord = FirebaseAuth.getInstance().getUser(uid);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getUid());

Python

from firebase_admin import auth

user = auth.get_user(uid)
print(f'Successfully fetched user data: {user.uid}')

Go

// Get an auth client from the firebase.App
client, err := app.Auth(ctx)
if err != nil {
	log.Fatalf("error getting Auth client: %v\n", err)
}

u, err := client.GetUser(ctx, uid)
if err != nil {
	log.Fatalf("error getting user %s: %v\n", uid, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

C#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserAsync(uid);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

এই পদ্ধতিটি, পদ্ধতিতে প্রদান করা uid-এর সাথে সম্পর্কিত ব্যবহারকারীর জন্য একটি UserRecord অবজেক্ট রিটার্ন করে।

প্রদান করা uid কোনও আগে থেকেই থাকা ব্যবহারকারীর না হলে অথবা অন্য কোনও কারণে ব্যবহারকারীর ডেটা ফেচ করা না গেলে, উপরের পদ্ধতিটি একটি সমস্যা দেখায়। বিবরণ ও সমাধানের ধাপ সহ সমস্যার কোডের সম্পূর্ণ তালিকা দেখতে, Admin Auth API সংক্রান্ত সমস্যা দেখুন।

কিছু ক্ষেত্রে, ব্যবহারকারীর uid-এর পরিবর্তে তার ইমেল আইডি আপনার কাছে থাকবে। Firebase অ্যাডমিন SDK ইমেলের মাধ্যমে ব্যবহারকারীর তথ্য খোঁজার সুবিধা দেয়:

Node.js

getAuth()
  .getUserByEmail(email)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data: ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

জাভা

UserRecord userRecord = FirebaseAuth.getInstance().getUserByEmail(email);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getEmail());

Python

from firebase_admin import auth

user = auth.get_user_by_email(email)
print(f'Successfully fetched user data: {user.uid}')

Go

u, err := client.GetUserByEmail(ctx, email)
if err != nil {
	log.Fatalf("error getting user by email %s: %v\n", email, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

C#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByEmailAsync(email);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

এই পদ্ধতিটি প্রদত্ত ইমেলের সাথে সম্পর্কিত ব্যবহারকারীর জন্য একটি UserRecord অবজেক্ট রিটার্ন করে।

প্রদান করা ইমেল আইডি যদি আগে থেকেই থাকা কোনও ব্যবহারকারীর না হয় অথবা অন্য কোনও কারণে ব্যবহারকারীর ডেটা ফেচ করা না যায়, তাহলে Admin SDK একটি সমস্যা দেখায়। বিবরণ ও সমাধানের ধাপ সহ সমস্যার কোডের সম্পূর্ণ তালিকা দেখতে, Admin Authentication API সংক্রান্ত সমস্যা দেখুন।

অন্যান্য ক্ষেত্রে, আপনি ব্যবহারকারীর uid-এর পরিবর্তে তার ফোন নম্বর পাবেন। Firebase Admin SDK-এর মাধ্যমে ফোন নম্বর ব্যবহার করে ব্যবহারকারীর তথ্য খুঁজে দেখা যায়:

Node.js

getAuth()
  .getUserByPhoneNumber(phoneNumber)
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log(`Successfully fetched user data:  ${userRecord.toJSON()}`);
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

জাভা

UserRecord userRecord = FirebaseAuth.getInstance().getUserByPhoneNumber(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
System.out.println("Successfully fetched user data: " + userRecord.getPhoneNumber());

Python

from firebase_admin import auth

user = auth.get_user_by_phone_number(phone)
print(f'Successfully fetched user data: {user.uid}')

Go

u, err := client.GetUserByPhoneNumber(ctx, phone)
if err != nil {
	log.Fatalf("error getting user by phone %s: %v\n", phone, err)
}
log.Printf("Successfully fetched user data: %v\n", u)

C#

UserRecord userRecord = await FirebaseAuth.DefaultInstance.GetUserByPhoneNumberAsync(phoneNumber);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully fetched user data: {userRecord.Uid}");

এই পদ্ধতিতে, প্রদান করা ফোন নম্বরের সাথে সম্পর্কিত ব্যবহারকারীর জন্য একটি UserRecord অবজেক্ট রিটার্ন করা হয়।

প্রদান করা ফোন নম্বরটি কোনও বিদ্যমান ব্যবহারকারীর না হলে বা অন্য কোনও কারণে ব্যবহারকারীর তথ্য পাওয়া না গেলে, Admin SDK একটি সমস্যা দেখায়। বিবরণ ও সমাধানের ধাপ সহ সমস্যার কোডের সম্পূর্ণ তালিকা দেখতে, Admin Authentication API সংক্রান্ত সমস্যা দেখুন।

বাল্কে ব্যবহারকারীর ডেটা রিট্রিভ করা

এছাড়াও, Firebase Admin SDK আপনাকে দেওয়া শনাক্তকারীর ভিত্তিতে ব্যবহারকারীদের তালিকা রিট্রিভ করার অনুমতি দেয়। আপনি ব্যবহারকারীর ইউজার আইডি, ইমেল বা ফোন নম্বর দিয়ে তাকে শনাক্ত করতে পারবেন। একটি কলে সর্বাধিক ১০০টি শনাক্তকারী প্রদান করা যেতে পারে। আইডেন্টিফায়ারে বিভিন্ন ধরনের মিশ্রণ থাকতে পারে:

Node.js

getAuth()
  .getUsers([
    { uid: 'uid1' },
    { email: 'user2@example.com' },
    { phoneNumber: '+15555550003' },
    { providerId: 'google.com', providerUid: 'google_uid4' },
  ])
  .then((getUsersResult) => {
    console.log('Successfully fetched user data:');
    getUsersResult.users.forEach((userRecord) => {
      console.log(userRecord);
    });

    console.log('Unable to find users corresponding to these identifiers:');
    getUsersResult.notFound.forEach((userIdentifier) => {
      console.log(userIdentifier);
    });
  })
  .catch((error) => {
    console.log('Error fetching user data:', error);
  });

জাভা

GetUsersResult result = FirebaseAuth.getInstance().getUsersAsync(Arrays.asList(
    new UidIdentifier("uid1"),
    new EmailIdentifier("user2@example.com"),
    new PhoneIdentifier("+15555550003"),
    new ProviderIdentifier("google.com", "google_uid4"))).get();

System.out.println("Successfully fetched user data:");
for (UserRecord user : result.getUsers()) {
  System.out.println(user.getUid());
}

System.out.println("Unable to find users corresponding to these identifiers:");
for (UserIdentifier uid : result.getNotFound()) {
  System.out.println(uid);
}

Python

from firebase_admin import auth

result = auth.get_users([
    auth.UidIdentifier('uid1'),
    auth.EmailIdentifier('user2@example.com'),
    auth.PhoneIdentifier(+15555550003),
    auth.ProviderIdentifier('google.com', 'google_uid4')
])

print('Successfully fetched user data:')
for user in result.users:
    print(user.uid)

print('Unable to find users corresponding to these identifiers:')
for uid in result.not_found:
    print(uid)

Go

getUsersResult, err := client.GetUsers(ctx, []auth.UserIdentifier{
	auth.UIDIdentifier{UID: "uid1"},
	auth.EmailIdentifier{Email: "user@example.com"},
	auth.PhoneIdentifier{PhoneNumber: "+15555551234"},
	auth.ProviderIdentifier{ProviderID: "google.com", ProviderUID: "google_uid1"},
})
if err != nil {
	log.Fatalf("error retriving multiple users: %v\n", err)
}

log.Printf("Successfully fetched user data:")
for _, u := range getUsersResult.Users {
	log.Printf("%v", u)
}

log.Printf("Unable to find users corresponding to these identifiers:")
for _, id := range getUsersResult.NotFound {
	log.Printf("%v", id)
}

C#

GetUsersResult result = await FirebaseAuth.DefaultInstance.GetUsersAsync(
    new List<UserIdentifier>
    {
        new UidIdentifier("uid1"),
        new EmailIdentifier("user2@example.com"),
        new PhoneIdentifier("+15555550003"),
        new ProviderIdentifier("google.com", "google_uid4"),
    });

Console.WriteLine("Successfully fetched user data:");
foreach (UserRecord user in result.Users)
{
    Console.WriteLine($"User: {user.Uid}");
}

Console.WriteLine("Unable to find users corresponding to these identifiers:");
foreach (UserIdentifier uid in result.NotFound)
{
    Console.WriteLine($"{uid}");
}

এই পদ্ধতি ইনপুট তালিকার সমান সাইজের একটি তালিকা রিটার্ন করে, যার প্রতিটি এন্ট্রি তে সংশ্লিষ্ট UserRecord অথবা সেই শনাক্তকারীকে কেন লুক-আপ করা যায়নি তা উল্লেখ করা একটি সমস্যা থাকে। বিবরণ ও সমাধানের ধাপ সহ সমস্যার কোডের সম্পূর্ণ তালিকা পেতে, Admin Authentication API সমস্যা দেখুন।

ব্যবহারকারী তৈরি করা

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

Node.js

getAuth()
  .createUser({
    email: 'user@example.com',
    emailVerified: false,
    phoneNumber: '+11234567890',
    password: 'secretPassword',
    displayName: 'John Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: false,
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((error) => {
    console.log('Error creating new user:', error);
  });

জাভা

CreateRequest request = new CreateRequest()
    .setEmail("user@example.com")
    .setEmailVerified(false)
    .setPassword("secretPassword")
    .setPhoneNumber("+11234567890")
    .setDisplayName("John Doe")
    .setPhotoUrl("http://www.example.com/12345678/photo.png")
    .setDisabled(false);

UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());

Python

user = auth.create_user(
    email='user@example.com',
    email_verified=False,
    phone_number='+15555550100',
    password='secretPassword',
    display_name='John Doe',
    photo_url='http://www.example.com/12345678/photo.png',
    disabled=False)
print(f'Sucessfully created new user: {user.uid}')

Go

params := (&auth.UserToCreate{}).
	Email("user@example.com").
	EmailVerified(false).
	PhoneNumber("+15555550100").
	Password("secretPassword").
	DisplayName("John Doe").
	PhotoURL("http://www.example.com/12345678/photo.png").
	Disabled(false)
u, err := client.CreateUser(ctx, params)
if err != nil {
	log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)

C#

UserRecordArgs args = new UserRecordArgs()
{
    Email = "user@example.com",
    EmailVerified = false,
    PhoneNumber = "+11234567890",
    Password = "secretPassword",
    DisplayName = "John Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = false,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");

ডিফল্ট হিসেবে, Firebase Authentication নতুন ব্যবহারকারীর জন্য একটি র‍্যান্ডম uid তৈরি করবে। আপনি যদি নতুন ব্যবহারকারীর জন্য নিজের uid নির্দিষ্ট করতে চান, তাহলে ব্যবহারকারী তৈরি করার পদ্ধতিতে আর্গুমেন্ট হিসেবে এটি যোগ করতে পারেন:

Node.js

getAuth()
  .createUser({
    uid: 'some-uid',
    email: 'user@example.com',
    phoneNumber: '+11234567890',
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully created new user:', userRecord.uid);
  })
  .catch((error) => {
    console.log('Error creating new user:', error);
  });

জাভা

CreateRequest request = new CreateRequest()
    .setUid("some-uid")
    .setEmail("user@example.com")
    .setPhoneNumber("+11234567890");

UserRecord userRecord = FirebaseAuth.getInstance().createUser(request);
System.out.println("Successfully created new user: " + userRecord.getUid());

Python

user = auth.create_user(
    uid='some-uid', email='user@example.com', phone_number='+15555550100')
print(f'Sucessfully created new user: {user.uid}')

Go

params := (&auth.UserToCreate{}).
	UID(uid).
	Email("user@example.com").
	PhoneNumber("+15555550100")
u, err := client.CreateUser(ctx, params)
if err != nil {
	log.Fatalf("error creating user: %v\n", err)
}
log.Printf("Successfully created user: %v\n", u)

C#

UserRecordArgs args = new UserRecordArgs()
{
    Uid = "some-uid",
    Email = "user@example.com",
    PhoneNumber = "+11234567890",
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.CreateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully created new user: {userRecord.Uid}");

নিম্নলিখিত প্রপার্টির যেকোনও কম্বিনেশন প্রদান করা যেতে পারে:

সারণী ১. 'ব্যবহারকারী তৈরি করুন' অপারেশনের মাধ্যমে কাজ করে এমন প্রপার্টি

প্রপার্টি প্রকার বিবরণ
uid স্ট্রিং নতুন তৈরি করা ব্যবহারকারীকে অ্যাসাইন করার জন্য uid। ১-১২৮ অক্ষরের মধ্যে স্ট্রিং হতে হবে। এটি প্রদান করা না হলে, একটি র‍্যান্ডম uid অটোমেটিক জেনারেট করা হবে। কম সময়ের uid আরও ভালো পারফর্ম্যান্স দেয়।
email স্ট্রিং ব্যবহারকারীর প্রাথমিক ইমেল আইডি। অবশ্যই সঠিক ইমেল আইডি হতে হবে।
emailVerified বুলিয়ান ব্যবহারকারীর প্রাথমিক ইমেল আইডি যাচাই করা হয়েছে কিনা। এটি উল্লেখ করা না থাকলে, ডিফল্ট মান হল false.
phoneNumber স্ট্রিং ব্যবহারকারীর প্রাথমিক ফোন নম্বর। অবশ্যই E.164 স্পেসিফিকেশন মেনে চলা সঠিক ফোন নম্বর হতে হবে।
password স্ট্রিং ব্যবহারকারীর অপরিশোধিত, হ্যাশ না করা পাসওয়ার্ড। কমপক্ষে ৬টি অক্ষরের হতে হবে।
displayName স্ট্রিং ব্যবহারকারীর ডিসপ্লে নাম।
photoURL স্ট্রিং ব্যবহারকারীর ফটো URL.
disabled বুলিয়ান ব্যবহারকারী অক্ষম আছেন কিনা। শারীরিকভাবে অক্ষমদের জন্য true; চালু করার জন্য false। এটি উল্লেখ করা না থাকলে, ডিফল্ট হিসেবে false সেট করা হয়।

ব্যবহারকারী তৈরি করার পদ্ধতিটি নতুন তৈরি করা ব্যবহারকারীর জন্য একটি UserRecord অবজেক্ট রিটার্ন করে।

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

ব্যবহারকারীর তথ্য আপডেট করা

Firebase Admin SDK, আগে থেকে থাকা ব্যবহারকারীর ডেটা পরিবর্তন করার সুবিধা দেয়। আপনাকে সেই ব্যবহারকারীর জন্য আপডেট করার প্রপার্টির সাথে uid উল্লেখ করতে হবে:

Node.js

getAuth()
  .updateUser(uid, {
    email: 'modifiedUser@example.com',
    phoneNumber: '+11234567890',
    emailVerified: true,
    password: 'newPassword',
    displayName: 'Jane Doe',
    photoURL: 'http://www.example.com/12345678/photo.png',
    disabled: true,
  })
  .then((userRecord) => {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully updated user', userRecord.toJSON());
  })
  .catch((error) => {
    console.log('Error updating user:', error);
  });

জাভা

UpdateRequest request = new UpdateRequest(uid)
    .setEmail("user@example.com")
    .setPhoneNumber("+11234567890")
    .setEmailVerified(true)
    .setPassword("newPassword")
    .setDisplayName("Jane Doe")
    .setPhotoUrl("http://www.example.com/12345678/photo.png")
    .setDisabled(true);

UserRecord userRecord = FirebaseAuth.getInstance().updateUser(request);
System.out.println("Successfully updated user: " + userRecord.getUid());

Python

user = auth.update_user(
    uid,
    email='user@example.com',
    phone_number='+15555550100',
    email_verified=True,
    password='newPassword',
    display_name='John Doe',
    photo_url='http://www.example.com/12345678/photo.png',
    disabled=True)
print(f'Sucessfully updated user: {user.uid}')

Go

params := (&auth.UserToUpdate{}).
	Email("user@example.com").
	EmailVerified(true).
	PhoneNumber("+15555550100").
	Password("newPassword").
	DisplayName("John Doe").
	PhotoURL("http://www.example.com/12345678/photo.png").
	Disabled(true)
u, err := client.UpdateUser(ctx, uid, params)
if err != nil {
	log.Fatalf("error updating user: %v\n", err)
}
log.Printf("Successfully updated user: %v\n", u)

C#

UserRecordArgs args = new UserRecordArgs()
{
    Uid = uid,
    Email = "modifiedUser@example.com",
    PhoneNumber = "+11234567890",
    EmailVerified = true,
    Password = "newPassword",
    DisplayName = "Jane Doe",
    PhotoUrl = "http://www.example.com/12345678/photo.png",
    Disabled = true,
};
UserRecord userRecord = await FirebaseAuth.DefaultInstance.UpdateUserAsync(args);
// See the UserRecord reference doc for the contents of userRecord.
Console.WriteLine($"Successfully updated user: {userRecord.Uid}");

নিম্নলিখিত প্রপার্টির যেকোনও কম্বিনেশন প্রদান করা যেতে পারে:

টেবিল ২. ব্যবহারকারীকে আপডেট করার অপারেশনে কাজ করে এমন প্রপার্টি

প্রপার্টি প্রকার বিবরণ
email স্ট্রিং ব্যবহারকারীর নতুন প্রাথমিক ইমেল আইডি। অবশ্যই সঠিক ইমেল আইডি হতে হবে।
emailVerified বুলিয়ান ব্যবহারকারীর প্রাথমিক ইমেল আইডি যাচাই করা হয়েছে কিনা। এটি উল্লেখ করা না থাকলে, ডিফল্ট মান হল false.
phoneNumber স্ট্রিং | null ব্যবহারকারীর নতুন প্রাথমিক ফোন নম্বর। অবশ্যই E.164 স্পেসিফিকেশন মেনে চলা সঠিক ফোন নম্বর হতে হবে। ব্যবহারকারীর আগে থেকে থাকা ফোন নম্বর মুছে দিতে null-এ সেট করুন।
password স্ট্রিং ব্যবহারকারীর নতুন অপরিশোধিত, হ্যাশ করা হয়নি এমন পাসওয়ার্ড। কমপক্ষে ৬টি অক্ষরের হতে হবে।
displayName স্ট্রিং | null ব্যবহারকারীর নতুন ডিসপ্লে নাম। ব্যবহারকারীর আগে থেকে থাকা ডিসপ্লে নাম মুছে দিতে null হিসেবে সেট করুন।
photoURL স্ট্রিং | null ব্যবহারকারীর নতুন ফটোর URL. ব্যবহারকারীর আগে থেকে থাকা ফটো URL সরিয়ে দিতে null-এ সেট করুন। null না হলে, সঠিক URL হতে হবে।
disabled বুলিয়ান ব্যবহারকারী অক্ষম আছেন কিনা। শারীরিকভাবে অক্ষমদের জন্য true; চালু করার জন্য false।

আপডেট ব্যবহারকারী পদ্ধতিটি আপডেট সফলভাবে সম্পূর্ণ হলে একটি আপডেট করা UserRecord অবজেক্ট রিটার্ন করে।

প্রদত্ত uid কোনও আগে থেকে থাকা ব্যবহারকারীর সাথে না মিললে, প্রদত্ত ইমেল বা ফোন নম্বর আগে থেকে থাকা ব্যবহারকারী ব্যবহার করলে অথবা অন্য কোনও কারণে ব্যবহারকারীকে আপডেট করা না গেলে, উপরে উল্লেখ করা পদ্ধতিটি একটি এরর মেসেজ সহ কাজ করে না। বিবরণ ও সমাধান সহ সমস্যার কোডের সম্পূর্ণ তালিকা পেতে, Admin Authentication API সংক্রান্ত সমস্যা দেখুন।

ব্যবহারকারীকে মুছে দেওয়া

Firebase Admin SDK, ব্যবহারকারীর uid ব্যবহার করে আগে থেকে থাকা ব্যবহারকারীদের মুছে ফেলার অনুমতি দেয়:

Node.js

getAuth()
  .deleteUser(uid)
  .then(() => {
    console.log('Successfully deleted user');
  })
  .catch((error) => {
    console.log('Error deleting user:', error);
  });

জাভা

FirebaseAuth.getInstance().deleteUser(uid);
System.out.println("Successfully deleted user.");

Python

auth.delete_user(uid)
print('Successfully deleted user')

Go

err := client.DeleteUser(ctx, uid)
if err != nil {
	log.Fatalf("error deleting user: %v\n", err)
}
log.Printf("Successfully deleted user: %s\n", uid)

C#

await FirebaseAuth.DefaultInstance.DeleteUserAsync(uid);
Console.WriteLine("Successfully deleted user.");

ব্যবহারকারীকে মুছে ফেলার পদ্ধতিটি সফলভাবে সম্পূর্ণ হলে, কোনও ফলাফল দেখায় না।

প্রদান করা uid কোনও বিদ্যমান ব্যবহারকারীর সাথে না মিললে অথবা অন্য কোনও কারণে ব্যবহারকারীকে মুছে ফেলা না গেলে, ব্যবহারকারীকে মুছে ফেলার পদ্ধতিটি একটি সমস্যা দেখায়। বিবরণ ও সমাধানের ধাপ সহ সমস্যার কোডের সম্পূর্ণ তালিকা দেখতে, Admin Authentication API সংক্রান্ত সমস্যা দেখুন।

একাধিক ব্যবহারকারীকে মুছে দেওয়া

Firebase Admin SDK-ও একবারে একাধিক ব্যবহারকারীকে মুছে দিতে পারে। তবে, মনে রাখবেন, deleteUsers(uids)-এর মতো পদ্ধতি ব্যবহার করে একাধিক ব্যবহারকারীকে একসাথে মুছে দিলে, Cloud Functions for Firebase-এর জন্য onDelete() ইভেন্ট হ্যান্ডলার ট্রিগার হবে না। এর কারণ হল, ব্যাচ মুছে ফেলার ফলে প্রতিটি ব্যবহারকারীর ক্ষেত্রে ব্যবহারকারী মুছে ফেলার ইভেন্ট ট্রিগার হয় না। আপনি যদি চান যে মুছে ফেলা প্রতিটি ব্যবহারকারীর জন্য ব্যবহারকারী মুছে ফেলা ইভেন্ট ফায়ার হোক, তাহলে এক এক করে ব্যবহারকারীদের মুছে দিন।

Node.js

getAuth()
  .deleteUsers([uid1, uid2, uid3])
  .then((deleteUsersResult) => {
    console.log(`Successfully deleted ${deleteUsersResult.successCount} users`);
    console.log(`Failed to delete ${deleteUsersResult.failureCount} users`);
    deleteUsersResult.errors.forEach((err) => {
      console.log(err.error.toJSON());
    });
  })
  .catch((error) => {
    console.log('Error deleting users:', error);
  });

জাভা

DeleteUsersResult result = FirebaseAuth.getInstance().deleteUsersAsync(
    Arrays.asList("uid1", "uid2", "uid3")).get();

System.out.println("Successfully deleted " + result.getSuccessCount() + " users");
System.out.println("Failed to delete " + result.getFailureCount() + " users");
for (ErrorInfo error : result.getErrors()) {
  System.out.println("error #" + error.getIndex() + ", reason: " + error.getReason());
}

Python

from firebase_admin import auth

result = auth.delete_users(["uid1", "uid2", "uid3"])

print(f'Successfully deleted {result.success_count} users')
print(f'Failed to delete {result.failure_count} users')
for err in result.errors:
    print(f'error #{result.index}, reason: {result.reason}')

Go

deleteUsersResult, err := client.DeleteUsers(ctx, []string{"uid1", "uid2", "uid3"})
if err != nil {
	log.Fatalf("error deleting users: %v\n", err)
}

log.Printf("Successfully deleted %d users", deleteUsersResult.SuccessCount)
log.Printf("Failed to delete %d users", deleteUsersResult.FailureCount)
for _, err := range deleteUsersResult.Errors {
	log.Printf("%v", err)
}

C#

DeleteUsersResult result = await FirebaseAuth.DefaultInstance.DeleteUsersAsync(new List<string>
    {
        "uid1",
        "uid2",
        "uid3",
    });

Console.WriteLine($"Successfully deleted {result.SuccessCount} users.");
Console.WriteLine($"Failed to delete {result.FailureCount} users.");

foreach (ErrorInfo err in result.Errors)
{
    Console.WriteLine($"Error #{err.Index}, reason: {err.Reason}");
}

delete users মেথড, মুছে ফেলা যায়নি এমন ব্যবহারকারীদের জন্য ব্যর্থতার একটি তালিকা রিটার্ন করে। বিবরণ ও সমাধানের ধাপ সহ সমস্যার কোডের সম্পূর্ণ তালিকা দেখতে, Admin Authentication API সংক্রান্ত সমস্যা দেখুন।

সব ব্যবহারকারীর তালিকা তৈরি করা

Firebase অ্যাডমিন SDK ব্যাচে ব্যবহারকারীদের সম্পূর্ণ তালিকা রিট্রিভ করার অনুমতি দেয়:

Node.js

const listAllUsers = (nextPageToken) => {
  // List batch of users, 1000 at a time.
  getAuth()
    .listUsers(1000, nextPageToken)
    .then((listUsersResult) => {
      listUsersResult.users.forEach((userRecord) => {
        console.log('user', userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken);
      }
    })
    .catch((error) => {
      console.log('Error listing users:', error);
    });
};
// Start listing users from the beginning, 1000 at a time.
listAllUsers();

জাভা

// Start listing users from the beginning, 1000 at a time.
ListUsersPage page = FirebaseAuth.getInstance().listUsers(null);
while (page != null) {
  for (ExportedUserRecord user : page.getValues()) {
    System.out.println("User: " + user.getUid());
  }
  page = page.getNextPage();
}

// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
page = FirebaseAuth.getInstance().listUsers(null);
for (ExportedUserRecord user : page.iterateAll()) {
  System.out.println("User: " + user.getUid());
}

Python

# Start listing users from the beginning, 1000 at a time.
page = auth.list_users()
while page:
    for user in page.users:
        print('User: ' + user.uid)
    # Get next batch of users.
    page = page.get_next_page()

# Iterate through all users. This will still retrieve users in batches,
# buffering no more than 1000 users in memory at a time.
for user in auth.list_users().iterate_all():
    print('User: ' + user.uid)

Go

// Note, behind the scenes, the Users() iterator will retrive 1000 Users at a time through the API
iter := client.Users(ctx, "")
for {
	user, err := iter.Next()
	if err == iterator.Done {
		break
	}
	if err != nil {
		log.Fatalf("error listing users: %s\n", err)
	}
	log.Printf("read user user: %v\n", user)
}

// Iterating by pages 100 users at a time.
// Note that using both the Next() function on an iterator and the NextPage()
// on a Pager wrapping that same iterator will result in an error.
pager := iterator.NewPager(client.Users(ctx, ""), 100, "")
for {
	var users []*auth.ExportedUserRecord
	nextPageToken, err := pager.NextPage(&users)
	if err != nil {
		log.Fatalf("paging error %v\n", err)
	}
	for _, u := range users {
		log.Printf("read user user: %v\n", u)
	}
	if nextPageToken == "" {
		break
	}
}

C#

// Start listing users from the beginning, 1000 at a time.
var pagedEnumerable = FirebaseAuth.DefaultInstance.ListUsersAsync(null);
var responses = pagedEnumerable.AsRawResponses().GetAsyncEnumerator();
while (await responses.MoveNextAsync())
{
    ExportedUserRecords response = responses.Current;
    foreach (ExportedUserRecord user in response.Users)
    {
        Console.WriteLine($"User: {user.Uid}");
    }
}

// Iterate through all users. This will still retrieve users in batches,
// buffering no more than 1000 users in memory at a time.
var enumerator = FirebaseAuth.DefaultInstance.ListUsersAsync(null).GetAsyncEnumerator();
while (await enumerator.MoveNextAsync())
{
    ExportedUserRecord user = enumerator.Current;
    Console.WriteLine($"User: {user.Uid}");
}

ফলাফলের প্রতিটি ব্যাচে ব্যবহারকারীদের একটি তালিকা এবং ব্যবহারকারীদের পরবর্তী ব্যাচ তালিকাভুক্ত করতে ব্যবহৃত নেক্সট পেজ টোকেন থাকে। সব ব্যবহারকারীর নাম আগেই তালিকাভুক্ত করা হয়ে গেলে, কোনও pageToken উত্তর দেওয়া হয় না।

কোনও maxResults ফিল্ড উল্লেখ করা না থাকলে, ডিফল্ট হিসেবে প্রতি ব্যাচে ১০০০ জন ব্যবহারকারীকে ব্যবহার করা হয়। একসাথে তালিকাভুক্ত করার জন্য অনুমোদিত ব্যবহারকারীর সর্বাধিক সংখ্যাও এটি। সর্বাধিক মানের থেকে বেশি মান দিলে আর্গুমেন্ট সংক্রান্ত সমস্যা হবে। কোনও pageToken নির্দিষ্ট করা না থাকলে, অপারেশনটি শুরু থেকে ব্যবহারকারীদের তালিকা তৈরি করবে এবং uid অনুযায়ী সাজাবে।

বিবরণ ও সমাধানের ধাপ সহ সমস্যার কোডের সম্পূর্ণ তালিকা দেখতে, Admin Authentication API সংক্রান্ত সমস্যা দেখুন।

তালিকাভুক্ত ব্যবহারকারীদের পাসওয়ার্ড হ্যাশ

এছাড়াও, এই API পাসওয়ার্ড ব্যবহারকারীদের জন্য Firebase Auth ব্যাকএন্ডের দ্বারা হ্যাশ করা passwordSalt এবং passwordHash রিটার্ন করে, যদি অনুরোধ জেনারেট করতে ব্যবহৃত ব্যবহারকারী/পরিষেবা অ্যাকাউন্টের OAuth অ্যাক্সেস টোকেনে firebaseauth.configs.getHashConfig অনুমতি থাকে। অন্যথায়, passwordHash এবং passwordSalt সেট করা হবে না।

পাসওয়ার্ড হ্যাশ সংবেদনশীল হওয়ায়, Firebase Admin SDK পরিষেবা অ্যাকাউন্টের কাছে firebaseauth.configs.getHashConfig অনুমতি ডিফল্ট হিসেবে থাকে না। আপনি কোনও ব্যবহারকারী/পরিষেবা অ্যাকাউন্টে সরাসরি অনুমতি যোগ করতে পারবেন না, তবে আপনি কাস্টম IAM ভূমিকা তৈরি করে পরোক্ষভাবে তা করতে পারবেন।

কাস্টম IAM ভূমিকা তৈরি করতে:

  1. Google Cloud কনসোলে IAM ও অ্যাডমিন প্যানেলের মধ্যে থাকা ভূমিকা পৃষ্ঠায় যান।
  2. পৃষ্ঠার সবচেয়ে উপরে থাকা ড্রপ-ডাউন মেনু থেকে আপনার প্রোজেক্ট বেছে নিন।
  3. ভূমিকা তৈরি করুন বিকল্পে ক্লিক করুন
  4. অনুমতি যোগ করুন বিকল্পে ক্লিক করুন
  5. firebaseauth.configs.getHashConfig অনুমতির জন্য সার্চ করুন এবং সেই চেকবক্সটি বেছে নিন।
  6. যোগ করুন বিকল্পে ক্লিক করুন
  7. নতুন ভূমিকা তৈরি করা সম্পূর্ণ করতে তৈরি করুন বিকল্পে ক্লিক করুন।

IAM পৃষ্ঠায় ব্যবহারকারী/পরিষেবা অ্যাকাউন্টে তৈরি করা কাস্টম ভূমিকা যোগ করুন:

  1. IAM ও অ্যাডমিন প্যানেলে, IAM বিকল্প বেছে নিন
  2. এডিট করার জন্য মেম্বারদের তালিকা থেকে পরিষেবা বা ব্যবহারকারীর অ্যাকাউন্ট বেছে নিন।
  3. অন্য একটি ভূমিকা যোগ করুন বিকল্পে ক্লিক করুন।
  4. আগে তৈরি করা নতুন কাস্টম ভূমিকা সার্চ করুন।
  5. সেভ করুন বিকল্পে ক্লিক করুন।