Google มุ่งมั่นที่จะพัฒนาความเท่าเทียมทางเชื้อชาติสำหรับชุมชนคนผิวดำ มาดูกันว่า
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

เชื่อมโยงผู้ให้บริการรับรองความถูกต้องหลายบัญชีเข้ากับบัญชีโดยใช้ JavaScript

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

ก่อนที่คุณจะเริ่ม

เพิ่มการสนับสนุนสำหรับผู้ให้บริการการตรวจสอบความถูกต้องสองคนขึ้นไป (อาจรวมถึงการรับรองความถูกต้องแบบไม่ระบุชื่อ) ให้กับแอปของคุณ

หากต้องการเชื่อมโยงข้อมูลรับรองจากผู้ให้บริการรับรองความถูกต้องเช่น Google หรือ Facebook กับบัญชีผู้ใช้ที่มีอยู่:

  1. ลงชื่อเข้าใช้โดยใช้ผู้ให้บริการหรือวิธีการรับรองความถูกต้อง
  2. รับวัตถุ AuthProvider ที่สอดคล้องกับผู้ให้บริการที่คุณต้องการเชื่อมโยงกับบัญชีของผู้ใช้ ตัวอย่าง:
    var googleProvider = new firebase.auth.GoogleAuthProvider();
    var facebookProvider = new firebase.auth.FacebookAuthProvider();
    var twitterProvider = new firebase.auth.TwitterAuthProvider();
    var githubProvider = new firebase.auth.GithubAuthProvider();
  3. แจ้งให้ผู้ใช้ลงชื่อเข้าใช้ด้วยผู้ให้บริการที่คุณต้องการเชื่อมโยง คุณสามารถแจ้งให้ผู้ใช้ลงชื่อเข้าใช้โดยเปิดหน้าต่างป๊อปอัปหรือเปลี่ยนเส้นทางไปที่หน้าลงชื่อเข้าใช้ของผู้ให้บริการ วิธีการเปลี่ยนเส้นทางเป็นที่ต้องการในอุปกรณ์มือถือ
    • ในการลงชื่อเข้าใช้ด้วยหน้าต่างป๊อปอัปโทร linkWithPopup :
      auth.currentUser.linkWithPopup(provider).then(function(result) {
        // Accounts successfully linked.
        var credential = result.credential;
        var user = result.user;
        // ...
      }).catch(function(error) {
        // Handle Errors here.
        // ...
      });
    • หากต้องการลงชื่อเข้าใช้โดยเปลี่ยนเส้นทางไปที่หน้าลงชื่อเข้าใช้ของผู้ให้บริการโทร linkWithRedirect :
      auth.currentUser.linkWithRedirect(provider)
        .then(/* ... */)
        .catch(/* ... */);
      หลังจากผู้ใช้ลงชื่อเข้าใช้พวกเขาจะถูกนำกลับไปยังหน้าของคุณ จากนั้นคุณสามารถดึงผลลัพธ์การลงชื่อเข้าใช้โดยเรียกใช้ getRedirectResult เมื่อเพจของคุณโหลด:
      auth.getRedirectResult().then(function(result) {
        if (result.credential) {
          // Accounts successfully linked.
          var credential = result.credential;
          var user = result.user;
          // ...
        }
      }).catch(function(error) {
        // Handle Errors here.
        // ...
      });
    หากผู้ใช้ลงชื่อเข้าใช้สำเร็จบัญชีผู้ใช้กับผู้ให้บริการจะเชื่อมโยงกับบัญชีผู้ใช้ในโครงการ Firebase ของคุณ

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

    // The implementation of how you store your user data depends on your application
    var repo = new MyUserDataRepo();
    
    // Get reference to the currently signed-in user
    var prevUser = auth.currentUser;
    
    // Get the data which you will want to merge. This should be done now
    // while the app is still signed in as this user.
    var prevUserData = repo.get(prevUser);
    
    // Delete the user's data now, we will restore it if the merge fails
    repo.delete(prevUser);
    
    // Sign in user with the account you want to link to
    auth.signInWithCredential(newCredential).then(function(result) {
      console.log("Sign In Success", result);
      var currentUser = result.user;
      var currentUserData = repo.get(currentUser);
    
      // Merge prevUser and currentUser data stored in Firebase.
      // Note: How you handle this is specific to your application
      var mergedData = repo.merge(prevUserData, currentUserData);
    
      return prevUser.linkWithCredential(result.credential)
        .then(function(linkResult) {
          // Sign in with the newly linked credential
          return auth.signInWithCredential(linkResult.credential);
        })
        .then(function(signInResult) {
          // Save the merged data to the new user
          repo.set(signInResult.user, mergedData);
        });
    }).catch(function(error) {
      // If there are errors we want to undo the data merge/deletion
      console.log("Sign In Error", error);
      repo.set(prevUser, prevUserData);
      repo.set(currentUser, currentUserData);
    });

ในการเพิ่มที่อยู่อีเมลและข้อมูลรับรองรหัสผ่านให้กับบัญชีผู้ใช้ที่มีอยู่:

  1. ลงชื่อเข้าใช้โดยใช้ผู้ให้บริการหรือวิธีการรับรองความถูกต้อง
  2. แจ้งผู้ใช้สำหรับที่อยู่อีเมลและรหัสผ่านใหม่
  3. สร้างวัตถุ AuthCredential ด้วยที่อยู่อีเมลและรหัสผ่าน:
    var credential = firebase.auth.EmailAuthProvider.credential(email, password);
  4. ส่งผ่านวัตถุ AuthCredential ไปยัง linkWithCredential ของผู้ใช้ที่ลงชื่อเข้าใช้วิธี linkWithCredential :

    auth.currentUser.linkWithCredential(credential)
      .then(function(usercred) {
        var user = usercred.user;
        console.log("Account linking success", user);
      }).catch(function(error) {
        console.log("Account linking error", error);
      });

    การเรียกใช้ linkWithCredential จะล้มเหลวหากข้อมูลประจำตัวเชื่อมโยงกับบัญชีผู้ใช้อื่นแล้ว ในสถานการณ์นี้คุณต้องจัดการการรวมบัญชีและข้อมูลที่เกี่ยวข้องตามความเหมาะสมสำหรับแอปของคุณ (ดูตัวอย่างด้านบน)

คุณสามารถยกเลิกการเชื่อมโยงผู้ให้บริการรับรองความถูกต้องจากบัญชีเพื่อให้ผู้ใช้ไม่สามารถลงชื่อเข้าใช้ด้วยผู้ให้บริการนั้นได้อีกต่อไป

หากต้องการยกเลิกการเชื่อมโยงผู้ให้บริการรับรองความถูกต้องจากบัญชีผู้ใช้ให้ส่งรหัสผู้ให้บริการไปยังวิธี unlink การ unlink คุณสามารถรับ ID ผู้ให้บริการของผู้ให้บริการรับรองความถูกต้องที่เชื่อมโยงกับผู้ใช้จากคุณสมบัติ providerData

user.unlink(providerId).then(function() {
  // Auth provider unlinked from account
  // ...
}).catch(function(error) {
  // An error happened
  // ...
});