Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

จัดการผู้ใช้ใน Firebase

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

สร้างผู้ใช้

คุณสร้างผู้ใช้ใหม่ในโปรเจ็กต์ Firebase โดยเรียกใช้ createUserWithEmail:password:completion: หรือโดยการลงชื่อเข้าใช้ผู้ใช้เป็นครั้งแรกโดยใช้ผู้ให้บริการข้อมูลประจำตัวที่ติดต่อกับภายนอก เช่น Google Sign-In หรือ Facebook Login

คุณยังสามารถสร้างผู้ใช้ที่ตรวจสอบสิทธิ์ด้วยรหัสผ่านใหม่ได้จากส่วนการตรวจสอบสิทธิ์ของ คอนโซล Firebase บนหน้าผู้ใช้

รับผู้ใช้ที่ลงชื่อเข้าใช้อยู่ในปัจจุบัน

วิธีที่แนะนำในการรับผู้ใช้ปัจจุบันคือการตั้งค่าฟังบนอ็อบเจ็กต์ Auth:

Swift

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

วัตถุประสงค์-C

self.handle = [[FIRAuth auth]
    addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
      // ...
    }];

เมื่อใช้ Listener คุณจะมั่นใจได้ว่าอ็อบเจ็กต์ Auth ไม่ได้อยู่ในสถานะระดับกลาง เช่น การเริ่มต้น เมื่อคุณได้รับผู้ใช้ปัจจุบัน

คุณยังสามารถรับผู้ใช้ที่ลงชื่อเข้าใช้อยู่ในปัจจุบันได้โดยใช้คุณสมบัติ currentUser หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ currentUser จะเป็นศูนย์:

Swift

if Auth.auth().currentUser != nil {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

วัตถุประสงค์-C

if ([FIRAuth auth].currentUser) {
  // User is signed in.
  // ...
} else {
  // No user is signed in.
  // ...
}

รับโปรไฟล์ผู้ใช้

ในการรับข้อมูลโปรไฟล์ของผู้ใช้ ให้ใช้คุณสมบัติของอินสแตนซ์ของ FIRUser ตัวอย่างเช่น:

Swift

let user = Auth.auth().currentUser
if let user = user {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  let uid = user.uid
  let email = user.email
  let photoURL = user.photoURL
  var multiFactorString = "MultiFactor: "
  for info in user.multiFactor.enrolledFactors {
    multiFactorString += info.displayName ?? "[DispayName]"
    multiFactorString += " "
  }
  // ...
}

วัตถุประสงค์-C

FIRUser *user = [FIRAuth auth].currentUser;
if (user) {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  NSString *email = user.email;
  NSString *uid = user.uid;
  NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
  for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
    [multiFactorString appendString:info.displayName];
    [multiFactorString appendString:@" "];
  }
  NSURL *photoURL = user.photoURL;
  // ...
}

รับข้อมูลโปรไฟล์เฉพาะผู้ให้บริการของผู้ใช้

ในการรับข้อมูลโปรไฟล์ที่ดึงมาจากผู้ให้บริการการลงชื่อเข้าใช้ที่เชื่อมโยงกับผู้ใช้ ให้ใช้คุณสมบัติ providerData ตัวอย่างเช่น:

Swift

let userInfo = Auth.auth().currentUser?.providerData[indexPath.row]
cell?.textLabel?.text = userInfo?.providerID
// Provider-specific UID
cell?.detailTextLabel?.text = userInfo?.uid

วัตถุประสงค์-C

id<FIRUserInfo> userInfo = [FIRAuth auth].currentUser.providerData[indexPath.row];
cell.textLabel.text = [userInfo providerID];
// Provider-specific UID
cell.detailTextLabel.text = [userInfo uid];

อัพเดทโปรไฟล์ของผู้ใช้

คุณสามารถอัปเดตข้อมูลโปรไฟล์พื้นฐานของผู้ใช้—ชื่อที่แสดงและ URL รูปโปรไฟล์—ด้วยคลาส FIRUserProfileChangeRequest ตัวอย่างเช่น:

Swift

let changeRequest = Auth.auth().currentUser?.createProfileChangeRequest()
changeRequest?.displayName = displayName
changeRequest?.commitChanges { error in
  // ...
}

วัตถุประสงค์-C

FIRUserProfileChangeRequest *changeRequest = [[FIRAuth auth].currentUser profileChangeRequest];
changeRequest.displayName = userInput;
[changeRequest commitChangesWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

ตั้งค่าที่อยู่อีเมลของผู้ใช้

คุณสามารถตั้งค่าที่อยู่อีเมลของผู้ใช้โดยใช้ updateEmail:completion: ตัวอย่างเช่น:

Swift

Auth.auth().currentUser?.updateEmail(to: email) { error in
  // ...
}

วัตถุประสงค์-C

[[FIRAuth auth].currentUser updateEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

ส่งอีเมลยืนยันให้ผู้ใช้

คุณสามารถส่งอีเมลยืนยันที่อยู่ให้กับผู้ใช้โดยใช้เมธอด sendEmailVerificationWithCompletion: ตัวอย่างเช่น:

Swift

Auth.auth().currentUser?.sendEmailVerification { error in
  // ...
}

วัตถุประสงค์-C

[[FIRAuth auth].currentUser sendEmailVerificationWithCompletion:^(NSError *_Nullable error) {
  // ...
}];

คุณปรับแต่งเทมเพลตอีเมลที่ใช้ในส่วนการตรวจสอบสิทธิ์ของ คอนโซล Firebase ได้ในหน้าเทมเพลตอีเมล ดู เทมเพลตอีเมล ในศูนย์ช่วยเหลือของ Firebase

นอกจากนี้ยังสามารถส่งต่อสถานะผ่าน URL ดำเนิน การต่อเพื่อเปลี่ยนเส้นทางกลับไปที่แอปเมื่อส่งอีเมลยืนยัน

นอกจากนี้ คุณสามารถแปลอีเมลยืนยันโดยอัปเดตรหัสภาษาบนอินสแตนซ์ Auth ก่อนส่งอีเมล ตัวอย่างเช่น:

Swift

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

วัตถุประสงค์-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

ตั้งรหัสผ่านของผู้ใช้

คุณสามารถตั้งรหัสผ่านของผู้ใช้โดยใช้ updatePassword:completion: ตัวอย่างเช่น:

Swift

Auth.auth().currentUser?.updatePassword(to: password) { error in
  // ...
}

วัตถุประสงค์-C

[[FIRAuth auth].currentUser updatePassword:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

ส่งอีเมลรีเซ็ตรหัสผ่าน

คุณสามารถส่งอีเมลรีเซ็ตรหัสผ่านไปยังผู้ใช้โดยใช้ sendPasswordResetWithEmail:completion: ตัวอย่างเช่น:

Swift

Auth.auth().sendPasswordReset(withEmail: email) { error in
  // ...
}

วัตถุประสงค์-C

[[FIRAuth auth] sendPasswordResetWithEmail:userInput completion:^(NSError *_Nullable error) {
  // ...
}];

คุณปรับแต่งเทมเพลตอีเมลที่ใช้ในส่วนการตรวจสอบสิทธิ์ของ คอนโซล Firebase ได้ในหน้าเทมเพลตอีเมล ดู เทมเพลตอีเมล ในศูนย์ช่วยเหลือของ Firebase

นอกจากนี้ยังสามารถส่งต่อสถานะผ่าน URL ดำเนิน การต่อเพื่อเปลี่ยนเส้นทางกลับไปที่แอปเมื่อส่งอีเมลรีเซ็ตรหัสผ่าน

นอกจากนี้ คุณสามารถแปลอีเมลรีเซ็ตรหัสผ่านโดยอัปเดตรหัสภาษาบนอินสแตนซ์ Auth ก่อนส่งอีเมล ตัวอย่างเช่น:

Swift

Auth.auth().languageCode = "fr"
// To apply the default app language instead of explicitly setting it.
// Auth.auth().useAppLanguage()

วัตถุประสงค์-C

[FIRAuth auth].languageCode = @"fr";
// To apply the default app language instead of explicitly setting it.
// [[FIRAuth auth] useAppLanguage];

คุณยังส่งอีเมลรีเซ็ตรหัสผ่านได้จากคอนโซล Firebase

ลบผู้ใช้

คุณสามารถลบบัญชีผู้ใช้ด้วยวิธี deleteWithCompletion ตัวอย่างเช่น:

Swift

let user = Auth.auth().currentUser

user?.delete { error in
  if let error = error {
    // An error happened.
  } else {
    // Account deleted.
  }
}

วัตถุประสงค์-C

FIRUser *user = [FIRAuth auth].currentUser;

[user deleteWithCompletion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // Account deleted.
  }
}];

คุณยังสามารถลบผู้ใช้ออกจากส่วนการตรวจสอบสิทธิ์ของ คอนโซล Firebase บนหน้าผู้ใช้

ตรวจสอบสิทธิ์ผู้ใช้อีกครั้ง

การดำเนินการที่มีความละเอียดอ่อนด้านความปลอดภัยบางอย่าง เช่น การลบบัญชี การตั้งค่าที่อยู่อีเมลหลัก และ การเปลี่ยนรหัสผ่าน กำหนดให้ผู้ใช้เพิ่งลงชื่อเข้าใช้ หากคุณดำเนินการอย่างใดอย่างหนึ่งเหล่านี้ และผู้ใช้ลงชื่อเข้าใช้นานเกินไป การดำเนินการล้มเหลวด้วยข้อผิดพลาด FIRAuthErrorCodeCredentialTooOld เมื่อสิ่งนี้เกิดขึ้น ให้ตรวจสอบสิทธิ์ผู้ใช้อีกครั้งโดยรับข้อมูลรับรองการลงชื่อเข้าใช้ใหม่จากผู้ใช้และส่งข้อมูลรับรองเพื่อตรวจสอบ reauthenticate อีกครั้ง ตัวอย่างเช่น:

Swift

let user = Auth.auth().currentUser
var credential: AuthCredential

// Prompt the user to re-provide their sign-in credentials

user?.reauthenticate(with: credential) { error in
  if let error = error {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}

วัตถุประสงค์-C

FIRUser *user = [FIRAuth auth].currentUser;
FIRAuthCredential *credential;

// Prompt the user to re-provide their sign-in credentials

[user reauthenticateWithCredential:credential completion:^(NSError *_Nullable error) {
  if (error) {
    // An error happened.
  } else {
    // User re-authenticated.
  }
}];

นำเข้าบัญชีผู้ใช้

คุณนำเข้าบัญชีผู้ใช้จากไฟล์ไปยังโปรเจ็กต์ Firebase ได้โดยใช้คำสั่ง auth:import ของ Firebase CLI ตัวอย่างเช่น:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14