Catch up on everthing we announced at this year's Firebase Summit. Learn more

ตรวจสอบสิทธิ์โดยใช้ Apple ด้วย JavaScript

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

ก่อนจะเริ่ม

ในการลงชื่อเข้าใช้ผู้ใช้โดยใช้ Apple ก่อนอื่นให้กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple บนเว็บไซต์นักพัฒนาของ Apple จากนั้นเปิดใช้งาน Apple เป็นผู้ให้บริการการลงชื่อเข้าใช้สำหรับโปรเจ็กต์ Firebase ของคุณ

เข้าร่วม Apple Developer Program

เข้าสู่ระบบด้วยแอปเปิ้ลเท่านั้นที่สามารถกำหนดค่าโดยสมาชิกของ แอปเปิ้ลผู้พัฒนาโปรแกรม

กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple

ใน ผู้พัฒนาแอปเปิ้ล เว็บไซต์ทำต่อไปนี้:

  1. เชื่อมโยงเว็บไซต์ของคุณไปยังแอปที่อธิบายไว้ในส่วนแรกของ การกำหนดค่าการเข้าสู่ระบบกับแอปเปิ้ลสำหรับเว็บ เมื่อได้รับแจ้ง ให้ลงทะเบียน URL ต่อไปนี้เป็น Return URL:

    https://YOUR_FIREBASE_PROJECT_ID.firebaseapp.com/__/auth/handler

    คุณจะได้รับรหัสโครงการ Firebase ของคุณบน หน้า Firebase คอนโซลการตั้งค่า

    เมื่อเสร็จแล้ว ให้จดรหัสบริการใหม่ของคุณ ซึ่งคุณจะต้องใช้ในส่วนถัดไป

  2. สร้างเข้าสู่ระบบด้วยคีย์ส่วนตัวแอปเปิ้ล คุณจะต้องใช้คีย์ส่วนตัวและรหัสคีย์ใหม่ในส่วนถัดไป
  3. หากคุณใช้ใด ๆ ของคุณสมบัติ Firebase รับรองความถูกต้องของที่ส่งอีเมลไปยังผู้ใช้อีเมลรวมทั้งเชื่อมโยงเข้าสู่ระบบในการตรวจสอบที่อยู่อีเมลเปลี่ยนแปลงบัญชีเพิกถอนและอื่น ๆ การกำหนดค่าบริการอีเมลถ่ายทอดส่วนตัวแอปเปิ้ล และลงทะเบียน noreply@ YOUR_FIREBASE_PROJECT_ID .firebaseapp.com (หรือ โดเมนเทมเพลตอีเมลที่คุณกำหนดเอง) เพื่อให้ Apple สามารถส่งต่ออีเมลที่ส่งโดยการตรวจสอบสิทธิ์ Firebase ไปยังที่อยู่อีเมล Apple ที่ไม่ระบุตัวตน

เปิดใช้งาน Apple เป็นผู้ให้บริการลงชื่อเข้าใช้

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

ปฏิบัติตามข้อกำหนดด้านข้อมูลที่ไม่ระบุตัวตนของ Apple

เข้าสู่ระบบด้วยแอปเปิ้ลจะช่วยให้ผู้ใช้เลือกของที่ไม่เปิดเผยข้อมูลของพวกเขารวมถึงที่อยู่อีเมลของพวกเขาเมื่อลงนามใน. ผู้ใช้ที่เลือกตัวเลือกนี้มีที่อยู่อีเมลที่มีโดเมน privaterelay.appleid.com เมื่อคุณใช้ลงชื่อเข้าด้วย Apple ในแอปของคุณ คุณต้องปฏิบัติตามนโยบายหรือข้อกำหนดของนักพัฒนาที่เกี่ยวข้องใดๆ จาก Apple เกี่ยวกับ Apple ID ที่ไม่ระบุชื่อเหล่านี้

ซึ่งรวมถึงการขอความยินยอมจากผู้ใช้ที่จำเป็นก่อนที่คุณจะเชื่อมโยงข้อมูลส่วนบุคคลที่ระบุตัวตนโดยตรงใดๆ กับ Apple ID ที่ไม่ระบุตัวตน เมื่อใช้การตรวจสอบสิทธิ์ Firebase อาจรวมถึงการดำเนินการต่อไปนี้:

  • เชื่อมโยงที่อยู่อีเมลกับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
  • เชื่อมโยงหมายเลขโทรศัพท์กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
  • เชื่อมโยงข้อมูลประจำตัวทางสังคมที่ไม่ระบุชื่อ (Facebook, Google ฯลฯ) กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน

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

จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK

หากคุณกำลังสร้างเว็บแอป วิธีที่ง่ายที่สุดในการตรวจสอบสิทธิ์ผู้ใช้ของคุณด้วย Firebase โดยใช้บัญชี Apple คือการจัดการขั้นตอนการลงชื่อเข้าใช้ทั้งหมดด้วย Firebase JavaScript SDK

หากต้องการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase JavaScript SDK ให้ทำตามขั้นตอนเหล่านี้:

  1. สร้างตัวอย่างของ OAuthProvider โดยใช้รหัสผู้ให้บริการที่สอดคล้อง apple.com

    เว็บรุ่น 9

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('apple.com');

    เว็บรุ่น8

    var provider = new firebase.auth.OAuthProvider('apple.com');
  2. บังคับ: ระบุเพิ่มเติม OAuth 2.0 ขอบเขตเกินเริ่มต้นที่คุณต้องการที่จะร้องขอจากผู้ให้บริการการตรวจสอบ

    เว็บรุ่น 9

    provider.addScope('email');
    provider.addScope('name');

    เว็บรุ่น8

    provider.addScope('email');
    provider.addScope('name');

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

  3. เลือก: ถ้าคุณต้องการที่จะแสดงแอปเปิ้ลหน้าจอลงชื่อเข้าในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษตั้ง locale พารามิเตอร์ ดู เข้าสู่ระบบด้วยเอกสารแอปเปิ้ล สำหรับสถานที่ได้รับการสนับสนุน

    เว็บรุ่น 9

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });

    เว็บรุ่น8

    provider.setCustomParameters({
      // Localize the Apple authentication screen in French.
      locale: 'fr'
    });
  4. ตรวจสอบสิทธิ์กับ Firebase โดยใช้วัตถุผู้ให้บริการ OAuth คุณสามารถแจ้งให้ผู้ใช้ลงชื่อเข้าใช้ด้วยบัญชี Apple โดยเปิดหน้าต่างป๊อปอัปหรือเปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้ แนะนำให้ใช้วิธีการเปลี่ยนเส้นทางบนอุปกรณ์มือถือ

    • ลงชื่อเข้าใช้ด้วยหน้าต่างป๊อปอัพ, โทร signInWithPopup() :

      เว็บรุ่น 9

      import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // The signed-in user info.
          const user = result.user;
      
          // Apple credential
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
      
          // ...
        })
        .catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.email;
          // The credential that was used.
          const credential = OAuthProvider.credentialFromError(error);
      
          // ...
        });

      เว็บรุ่น8

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // The signed-in user info.
          var user = result.user;
      
          // You can also get the Apple OAuth Access and ID Tokens.
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
      
          // ...
        })
        .catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
      
          // ...
        });
    • เพื่อเข้าสู่ระบบโดยเปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้โทร signInWithRedirect() :

      เว็บรุ่น 9

      import { getAuth, signInWithRedirect } from "firebase/auth";
      
      const auth = getAuth();
      signInWithRedirect(auth, provider);

      เว็บรุ่น8

      firebase.auth().signInWithRedirect(provider);

      หลังจากที่เสร็จสิ้นการใช้การลงชื่อเข้าใช้และกลับไปที่หน้าคุณจะได้รับการลงชื่อเข้าใช้ผลโดยการเรียก getRedirectResult() :

      เว็บรุ่น 9

      import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth";
      
      // Result from Redirect auth flow.
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          const credential = OAuthProvider.credentialFromResult(result);
          if (credential) {
            // You can also get the Apple OAuth Access and ID Tokens.
            const accessToken = credential.accessToken;
            const idToken = credential.idToken;
          }
          // The signed-in user info.
          const user = result.user;
        })
        .catch((error) => {
          // Handle Errors here.
          const errorCode = error.code;
          const errorMessage = error.message;
          // The email of the user's account used.
          const email = error.email;
          // The credential that was used.
          const credential = OAuthProvider.credentialFromError(error);
      
          // ...
        });

      เว็บรุ่น8

      // Result from Redirect auth flow.
      firebase
        .auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // You can get the Apple OAuth Access and ID Tokens.
            var accessToken = credential.accessToken;
            var idToken = credential.idToken;
      
            // ...
          }
          // The signed-in user info.
          var user = result.user;
        })
        .catch((error) => {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          // The email of the user's account used.
          var email = error.email;
          // The firebase.auth.AuthCredential type that was used.
          var credential = error.credential;
      
          // ...
        });

      นี่คือที่ที่คุณสามารถตรวจจับและจัดการข้อผิดพลาดได้ สำหรับรายชื่อของรหัสข้อผิดพลาดให้ดูที่ การอ้างอิง API

    ไม่เหมือนกับผู้ให้บริการรายอื่นที่สนับสนุนโดย Firebase Auth Apple ไม่มี URL รูปภาพ

    นอกจากนี้เมื่อผู้ใช้เลือกที่จะไม่ใช้อีเมลของพวกเขากับ app บทบัญญัติแอปเปิ้ลที่อยู่อีเมลที่ไม่ซ้ำกันสำหรับผู้ใช้ (ในรูปแบบ xyz@privaterelay.appleid.com ) ซึ่งหุ้นกับแอปของคุณ หากคุณกำหนดค่าบริการส่งต่ออีเมลส่วนตัว Apple จะส่งต่ออีเมลที่ส่งไปยังที่อยู่ที่ไม่ระบุชื่อไปยังที่อยู่อีเมลจริงของผู้ใช้

    แอปเปิ้ลเพียงข้อมูลของผู้ใช้หุ้นดังกล่าวเป็นชื่อที่แสดงกับแอปเป็นครั้งแรกที่ใช้ลงชื่อเข้าใช้. โดยปกติ Firebase เก็บชื่อที่แสดงเป็นครั้งแรกที่ใช้ลงชื่อเข้าใช้ด้วยแอปเปิ้ลซึ่งคุณสามารถรับกับ firebase.auth().currentUser.displayName อย่างไรก็ตาม หากคุณเคยใช้ Apple เพื่อลงชื่อเข้าใช้แอปให้ผู้ใช้โดยไม่ใช้ Firebase Apple จะไม่ให้ชื่อที่แสดงของผู้ใช้กับ Firebase

การตรวจสอบสิทธิ์ซ้ำและการเชื่อมโยงบัญชี

รูปแบบเดียวกันสามารถใช้กับ reauthenticateWithPopup() และ reauthenticateWithRedirect() ซึ่งคุณสามารถใช้เพื่อดึงข้อมูลประจำตัวที่สดใหม่สำหรับการดำเนินงานที่สำคัญที่จำเป็นต้องลงชื่อเข้าใช้ล่าสุด:

เว็บรุ่น 9

import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth";

// Result from Redirect auth flow.
const auth = getAuth();
const provider = new OAuthProvider('apple.com');

reauthenticateWithPopup(auth.currentUser, provider)
  .then((result) => {
    // User is re-authenticated with fresh tokens minted and can perform
    // sensitive operations like account deletion, or updating their email
    // address or password.

    // The signed-in user info.
    const user = result.user;

    // You can also get the Apple OAuth Access and ID Tokens.
    const credential = OAuthProvider.credentialFromResult(result);
    const accessToken = credential.accessToken;
    const idToken = credential.idToken;

    // ...
  })
  .catch((error) => {
    // Handle Errors here.
    const errorCode = error.code;
    const errorMessage = error.message;
    // The email of the user's account used.
    const email = error.email;
    // The credential that was used.
    const credential = OAuthProvider.credentialFromError(error);

    // ...
  });

เว็บรุ่น8

const provider = new firebase.auth.OAuthProvider('apple.com');

firebase
  .auth()
  .currentUser
  .reauthenticateWithPopup(provider)
  .then((result) => {
    // User is re-authenticated with fresh tokens minted and can perform
    // sensitive operations like account deletion, or updating their email
    // address or password.
    /** @type {firebase.auth.OAuthCredential} */
    var credential = result.credential;

    // The signed-in user info.
    var user = result.user;
     // You can also get the Apple OAuth Access and ID Tokens.
    var accessToken = credential.accessToken;
    var idToken = credential.idToken;

    // ...
  })
  .catch((error) => {
    // Handle Errors here.
    var errorCode = error.code;
    var errorMessage = error.message;
    // The email of the user's account used.
    var email = error.email;
    // The firebase.auth.AuthCredential type that was used.
    var credential = error.credential;

    // ...
  });

และคุณสามารถใช้ linkWithPopup() และ linkWithRedirect() เพื่อเชื่อมโยงผู้ให้บริการตัวตนที่แตกต่างกันในการบัญชีที่มีอยู่

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

ตัวอย่างเช่น ในการเชื่อมโยงบัญชี Facebook กับบัญชี Firebase ปัจจุบัน ให้ใช้โทเค็นการเข้าถึงที่คุณได้รับจากการลงชื่อเข้าใช้ Facebook:

เว็บรุ่น 9

import { getAuth, linkWithPopup, FacebookAuthProvider } from "firebase/auth";

const auth = getAuth();
const provider = new FacebookAuthProvider();
provider.addScope('user_birthday');

// Assuming the current user is an Apple user linking a Facebook provider.
linkWithPopup(auth.currentUser, provider)
    .then((result) => {
      // Facebook credential is linked to the current Apple user.
      // ...

      // The user can now sign in to the same account
      // with either Apple or Facebook.
    })
    .catch((error) => {
      // Handle error.
    });

เว็บรุ่น8

const provider = new firebase.auth.FacebookAuthProvider();
provider.addScope('user_birthday');

// Assuming the current user is an Apple user linking a Facebook provider.
firebase.auth().currentUser.linkWithPopup(provider)
    .then((result) => {
      // Facebook credential is linked to the current Apple user.
      // Facebook additional data available in result.additionalUserInfo.profile,

      // Additional Facebook OAuth access token can also be retrieved.
      // result.credential.accessToken

      // The user can now sign in to the same account
      // with either Apple or Facebook.
    })
    .catch((error) => {
      // Handle error.
    });

ตรวจสอบสิทธิ์ด้วย Firebase ในส่วนขยายของ Chrome

หากคุณกำลังสร้างแอปส่วนขยาย Chrome คุณต้องเพิ่มรหัสส่วนขยาย Chrome ของคุณ:

  1. เปิดโครงการใน คอนโซล Firebase
  2. ในส่วนการตรวจสอบความถูกเปิดเข้าสู่ระบบในหน้าวิธีการ
  3. เพิ่ม URI เช่นต่อไปนี้ในรายชื่อของผู้มีอำนาจโดเมน:
    chrome-extension://CHROME_EXTENSION_ID

ป๊อปอัพเฉพาะการดำเนินงาน ( signInWithPopup , linkWithPopup และ reauthenticateWithPopup ) พร้อมที่จะให้ส่วนขยายของ Chrome เป็นส่วนขยายของ Chrome ไม่สามารถใช้ HTTP เปลี่ยนเส้นทาง คุณควรเรียกใช้เมธอดเหล่านี้จากสคริปต์ของเพจพื้นหลังแทนที่จะเป็นป๊อปอัปการดำเนินการของเบราว์เซอร์ เนื่องจากป๊อปอัปการตรวจสอบสิทธิ์จะยกเลิกป๊อปอัปการดำเนินการของเบราว์เซอร์ วิธีการป๊อปอัพอาจจะใช้เฉพาะในส่วนขยายการใช้ Manifest V2 ใหม่ Manifest V3 เพียง แต่ช่วยให้สคริปต์พื้นหลังในรูปแบบของคนงานบริการซึ่งไม่สามารถดำเนินการป๊อปอัพที่ทุกคน

ในส่วนขยายของ Chrome ของคุณทำให้ไฟล์ที่ประจักษ์แน่ใจว่าคุณเพิ่ม https://apis.google.com URL ไป content_security_policy allowlist

โปรดทราบว่าคุณยังต้องยืนยันโดเมนที่กำหนดเองกับ Apple เช่นเดียวกับโดเมน firebaseapp.com เริ่มต้น:

http://auth.custom.example.com/.well-known/apple-developer-domain-association.txt

ขั้นสูง: ตรวจสอบสิทธิ์ด้วย Firebase ใน Node.js

วิธีตรวจสอบสิทธิ์กับ Firebase ในแอปพลิเคชัน Node.js:

  1. ลงชื่อเข้าใช้ผู้ใช้ด้วยบัญชี Apple และรับโทเค็น Apple ID ของผู้ใช้ คุณสามารถทำสิ่งนี้ได้หลายวิธี ตัวอย่างเช่น หากแอป Node.js ของคุณมีส่วนหน้าของเบราว์เซอร์:

    1. ที่แบ็กเอนด์ของคุณ ให้สร้างสตริงสุ่ม ("nonce") และคำนวณแฮช SHA256 nonce เป็นค่าใช้ครั้งเดียวที่คุณใช้เพื่อตรวจสอบการเดินทางไปกลับครั้งเดียวระหว่างแบ็กเอนด์และเซิร์ฟเวอร์ตรวจสอบสิทธิ์ของ Apple

      เว็บรุ่น 9

      const crypto = require("crypto");
      const string_decoder = require("string_decoder");
      
      // Generate a new random string for each sign-in
      const generateNonce = (length) => {
        const decoder = new string_decoder.StringDecoder("ascii");
        const buf = Buffer.alloc(length);
        let nonce = "";
        while (nonce.length < length) {
          crypto.randomFillSync(buf);
          nonce = decoder.write(buf);
        }
        return nonce.substr(0, length);
      };
      
      const unhashedNonce = generateNonce(10);
      
      // SHA256-hashed nonce in hex
      const hashedNonceHex = crypto.createHash('sha256')
        .update(unhashedNonce).digest().toString('hex');

      เว็บรุ่น8

      const crypto = require("crypto");
      const string_decoder = require("string_decoder");
      
      // Generate a new random string for each sign-in
      const generateNonce = function(length) {
        const decoder = new string_decoder.StringDecoder("ascii");
        const buf = Buffer.alloc(length);
        var nonce = "";
        while (nonce.length < length) {
          crypto.randomFillSync(buf);
          nonce = decoder.write(buf);
        }
        return nonce.substr(0, length);
      };
      
      const unhashedNonce = generateNonce(10);
      
      // SHA256-hashed nonce in hex
      const hashedNonceHex = crypto.createHash('sha256')
        .update(unhashedNonce).digest().toString('hex');
    2. ในหน้าลงชื่อเข้าใช้ ให้ระบุ nonce ที่แฮชในการกำหนดค่าลงชื่อเข้าใช้ด้วย Apple:

      <script src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
      <div id="appleid-signin" data-color="black" data-border="true" data-type="sign in"></div>
      <script>
          AppleID.auth.init({
              clientId: YOUR_APPLE_CLIENT_ID,
              scope: 'name email',
              redirectURI: URL_TO_YOUR_REDIRECT_HANDLER,  // See the next step.
              state: '[STATE]',  // Optional value that Apple will send back to you
                                 // so you can return users to the same context after
                                 // they sign in.
              nonce: HASHED_NONCE  // The hashed nonce you generated in the previous step.
          });
      </script>
      
    3. รับโทเค็น Apple ID จากฝั่งเซิร์ฟเวอร์ตอบกลับการตรวจสอบสิทธิ์ POSTed:

      app.post('/redirect', (req, res) => {
        const savedState = req.cookies.__session;
        const code = req.body.code;
        const state = req.body.state;
        const appleIdToken = req.body.id_token;
        if (savedState !== state || !code) {
          res.status(403).send('403: Permission denied');
        } else {
          // Sign in with Firebase using appleIdToken. (See next step).
        }
      });
      

    ยังเห็น การกำหนดค่าหน้าเว็บของคุณสำหรับการเข้าสู่ระบบกับแอปเปิ้ล

  2. หลังจากที่คุณได้รับโทเค็น Apple ID ของผู้ใช้แล้ว ให้ใช้เพื่อสร้างอ็อบเจ็กต์ Credential จากนั้นลงชื่อเข้าใช้ผู้ใช้ด้วยข้อมูลรับรอง:

    เว็บรุ่น 9

    import { getAuth, signInWithCredential, OAuthProvider } from "firebase/auth";
    
    const auth = getAuth();
    
    // Build Firebase credential with the Apple ID token.
    const provider = new OAuthProvider('apple.com');
    const authCredential = provider.credential({
      idToken: appleIdToken,
      rawNonce: unhashedNonce,
    });
    
    // Sign in with credential form the Apple user.
    signInWithCredential(auth, authCredential)
      .then((result) => {
        // User signed in.
      })
      .catch((error) => {
        // An error occurred. If error.code == 'auth/missing-or-invalid-nonce',
        // make sure you're sending the SHA256-hashed nonce as a hex string
        // with your request to Apple.
        console.log(error);
      });

    เว็บรุ่น8

    // Build Firebase credential with the Apple ID token.
    const provider = new firebase.auth.OAuthProvider('apple.com');
    const authCredential = provider.credential({
      idToken: appleIdToken,
      rawNonce: unhashedNonce,
    });
    
    // Sign in with credential form the Apple user.
    firebase.auth().signInWithCredential(authCredential)
      .then((result) => {
        // User signed in.
      })
      .catch((error) => {
        // An error occurred. If error.code == 'auth/missing-or-invalid-nonce',
        // make sure you're sending the SHA256-hashed nonce as a hex string
        // with your request to Apple.
        console.log(error);
      });

ขั้นตอนถัดไป

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

  • ในปพลิเคชันของคุณวิธีที่แนะนำให้ทราบสถานะการรับรองความถูกต้องของผู้ใช้ของคุณคือการตั้งผู้สังเกตการณ์ใน Auth ของวัตถุ จากนั้นคุณจะได้รับข้อมูลรายละเอียดของผู้ใช้พื้นฐานจาก User วัตถุ ดู การจัดการผู้ใช้

  • ในฐานข้อมูล Firebase เรียลไทม์และการจัดเก็บเมฆ กฎการรักษาความปลอดภัย , คุณจะได้รับการลงนามใน ID ผู้ใช้ของผู้ใช้ที่ไม่ซ้ำกันจาก auth ตัวแปรและใช้ในการควบคุมสิ่งที่ข้อมูลที่เข้าถึงผู้ใช้สามารถ

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

ออกจากระบบผู้ใช้โทร signOut :

เว็บรุ่น 9

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

เว็บรุ่น8

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});