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

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

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

ก่อนจะเริ่ม

  1. เพิ่ม Firebase กับโครงการ JavaScript ของคุณ
  2. ใน Firebase คอนโซล , เปิดส่วนการตรวจสอบสิทธิ์
  3. ที่ลงในแท็บวิธีการที่ช่วยให้ผู้ให้บริการทวิตเตอร์
  4. เพิ่มคีย์ API และข้อมูลลับของ API จากผู้ให้บริการที่นักพัฒนาคอนโซลการกำหนดค่าของผู้ให้บริการ:
    1. ลงทะเบียนแอปของคุณ เป็นนักพัฒนาแอพลิเคชันบนทวิตเตอร์และได้รับของแอป OAuth คีย์ API และ API ลับ
    2. ตรวจสอบให้แน่ใจคุณ Firebase OAuth เปลี่ยนเส้นทาง URI (เช่น my-app-12345.firebaseapp.com/__/auth/handler ) ถูกกำหนดให้เป็น URL เรียกกลับการอนุญาตของคุณในแอปหน้าการตั้งค่าบน การตั้งค่าของแอปทวิตเตอร์
  5. คลิกบันทึก

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

หากคุณกำลังสร้างเว็บแอป วิธีที่ง่ายที่สุดในการตรวจสอบสิทธิ์ผู้ใช้ของคุณด้วย Firebase โดยใช้บัญชี Twitter คือการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase JavaScript SDK (หากคุณต้องการตรวจสอบสิทธิ์ผู้ใช้ใน Node.js หรือสภาพแวดล้อมอื่นที่ไม่ใช่เบราว์เซอร์ คุณต้องจัดการขั้นตอนการลงชื่อเข้าใช้ด้วยตนเอง)

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

  1. สร้างอินสแตนซ์ของวัตถุผู้ให้บริการ Twitter:

    เว็บรุ่น 9

    import { TwitterAuthProvider } from "firebase/auth";
    
    const provider = new TwitterAuthProvider();

    เว็บรุ่น8

    var provider = new firebase.auth.TwitterAuthProvider();
  2. เลือก: เมื่อต้องการ จำกัด การไหล OAuth ของผู้ให้บริการเป็นภาษาที่ผู้ใช้ต้องการอย่างชัดเจนโดยไม่ต้องผ่านพารามิเตอร์ OAuth ที่กำหนดเองที่เกี่ยวข้องอัปเดตโค้ดภาษาบนอินสแตนซ์รับรองความถูกต้องก่อนที่จะเริ่มการไหลของ OAuth ตัวอย่างเช่น:

    เว็บรุ่น 9

    import { getAuth } from "firebase/auth";
    
    const auth = getAuth();
    auth.languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();

    เว็บรุ่น8

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  3. บังคับ: ระบุพารามิเตอร์ผู้ให้บริการที่กำหนดเอง OAuth เพิ่มเติมที่คุณต้องการที่จะส่งคำขอของ OAuth หากต้องการเพิ่มพารามิเตอร์ที่กำหนดเองโทร setCustomParameters กับผู้ให้เริ่มต้นได้ด้วยวัตถุที่มีกุญแจสำคัญในการตามที่ระบุโดยผู้ให้บริการเอกสารของ OAuth และความคุ้มค่าที่สอดคล้องกัน ตัวอย่างเช่น:

    เว็บรุ่น 9

    provider.setCustomParameters({
      'lang': 'es'
    });

    เว็บรุ่น8

    provider.setCustomParameters({
      'lang': 'es'
    });
    ไม่อนุญาตให้ใช้พารามิเตอร์ OAuth ที่สงวนไว้และจะถูกละเว้น ดู อ้างอิงผู้ให้บริการการตรวจสอบ รายละเอียดเพิ่มเติม
  4. ตรวจสอบสิทธิ์กับ Firebase โดยใช้วัตถุผู้ให้บริการ Twitter คุณสามารถแจ้งให้ผู้ใช้ลงชื่อเข้าใช้ด้วยบัญชี Twitter โดยเปิดหน้าต่างป๊อปอัปหรือเปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้ แนะนำให้ใช้วิธีการเปลี่ยนเส้นทางบนอุปกรณ์มือถือ
    • ลงชื่อเข้าใช้ด้วยหน้าต่างป๊อปอัพ, โทร signInWithPopup :

      เว็บรุ่น 9

      import { getAuth, signInWithPopup, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
      
          // 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 AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      เว็บรุ่น8

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          var token = credential.accessToken;
          var secret = credential.secret;
      
          // 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;
          // ...
        });
      นอกจากนี้ โปรดสังเกตว่าคุณสามารถเรียกโทเค็น OAuth ของผู้ให้บริการ Twitter ซึ่งสามารถใช้เพื่อดึงข้อมูลเพิ่มเติมโดยใช้ Twitter API

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

    • เพื่อเข้าสู่ระบบโดยเปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้โทร signInWithRedirect :

      เว็บรุ่น 9

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

      เว็บรุ่น8

      firebase.auth().signInWithRedirect(provider);
      จากนั้นคุณยังสามารถเรียกโทเค็น OAuth ผู้ให้บริการของ Twitter โดยการเรียก getRedirectResult เมื่อโหลดหน้าเว็บของคุณ:

      เว็บรุ่น 9

      import { getAuth, getRedirectResult, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
          // ...
      
          // 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 AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      เว็บรุ่น8

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
            // You can use these server side with your app's credentials to access the Twitter API.
            var token = credential.accessToken;
            var secret = credential.secret;
            // ...
          }
      
          // 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;
          // ...
        });
      นี่คือที่ที่คุณสามารถตรวจจับและจัดการข้อผิดพลาดได้ สำหรับรายชื่อของรหัสข้อผิดพลาดมีลักษณะที่มี การตรวจสอบสิทธิ์การอ้างอิงเอกสาร

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

คุณยังสามารถตรวจสอบสิทธิ์กับ Firebase โดยใช้บัญชี Twitter โดยจัดการขั้นตอนการลงชื่อเข้าใช้โดยเรียกปลายทาง OAuth ของ Twitter:

  1. บูรณาการการตรวจสอบทวิตเตอร์ใน app ของคุณโดยทำตาม เอกสารของนักพัฒนา เมื่อสิ้นสุดขั้นตอนการลงชื่อเข้าใช้ Twitter คุณจะได้รับโทเค็นการเข้าถึง OAuth และข้อมูลลับของ OAuth
  2. หากคุณต้องการลงชื่อเข้าใช้แอปพลิเคชัน Node.js ให้ส่งโทเค็นการเข้าถึง OAuth และข้อมูลลับของ OAuth ไปยังแอปพลิเคชัน Node.js
  3. หลังจากที่ผู้ใช้ประสบความสำเร็จสัญญาณด้วย Twitter, แลกเปลี่ยนเข้าถึง OAuth โทเค็นและ OAuth ลับสำหรับ Firebase ข้อมูลประจำตัว:
    var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
    
  4. ตรวจสอบสิทธิ์กับ Firebase โดยใช้ข้อมูลรับรอง Firebase:

    เว็บรุ่น 9

    import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";
    
    // Sign in with the credential from the Facebook user.
    const auth = getAuth();
    signInWithCredential(auth, credential)
      .then((result) => {
        // Signed in 
        const credential = FacebookAuthProvider.credentialFromResult(result);
      })
      .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 AuthCredential type that was used.
        const credential = FacebookAuthProvider.credentialFromError(error);
        // ...
      });

    เว็บรุ่น8

    // Sign in with the credential from the Facebook user.
    firebase.auth().signInWithCredential(credential)
      .then((result) => {
        // Signed in       
        var credential = result.credential;
        // ...
      })
      .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;
        // ...
      });

ตรวจสอบสิทธิ์ด้วย 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

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

หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก บัญชีผู้ใช้ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับข้อมูลประจำตัว กล่าวคือ ชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการตรวจสอบสิทธิ์ ซึ่งผู้ใช้ลงชื่อเข้าใช้ บัญชีใหม่นี้จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ 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.
});