Xác thực bằng Twitter trong JavaScript

Bạn có thể cho phép người dùng xác thực bằng Firebase thông qua tài khoản Twitter của họ bằng cách tích hợp tính năng xác thực Twitter vào ứng dụng. Bạn có thể tích hợp tính năng xác thực Twitter bằng cách sử dụng Firebase SDK để thực hiện quy trình đăng nhập hoặc bằng cách thực hiện quy trình OAuth của Twitter theo cách thủ công và truyền mã truy cập cũng như khoá bí mật thu được cho Firebase.

Trước khi bắt đầu

  1. Thêm Firebase vào dự án JavaScript.
  2. Trong bảng điều khiển Firebase, hãy chuyển đến phần Bảo mật > Xác thực.
  3. Trong thẻ Phương thức đăng nhập, hãy bật trình cung cấp dịch vụ đăng nhập Twitter.
  4. Thêm khoá APIkhoá bí mật API từ bảng điều khiển dành cho nhà phát triển của nhà cung cấp đó vào cấu hình nhà cung cấp:
    1. Đăng ký ứng dụng làm ứng dụng nhà phát triển trên Twitter và lấy khoá APIkhoá bí mật API OAuth của ứng dụng.
    2. Đảm bảo rằng URI chuyển hướng OAuth của Firebase (ví dụ: my-app-12345.firebaseapp.com/__/auth/handler) được đặt làm URL gọi lại uỷ quyền trong trang cài đặt của ứng dụng trên cấu hình ứng dụng Twitter.
  5. Nhấp vào Lưu.

Xử lý quy trình đăng nhập bằng Firebase SDK

Nếu đang tạo một ứng dụng web, cách dễ nhất để xác thực người dùng bằng Firebase thông qua tài khoản Twitter của họ là xử lý quy trình đăng nhập bằng SDK JavaScript của Firebase. (Nếu muốn xác thực người dùng trong Node.js hoặc môi trường không phải trình duyệt khác, bạn phải xử lý quy trình đăng nhập theo cách thủ công.)

Để xử lý quy trình đăng nhập bằng SDK JavaScript của Firebase, hãy làm theo các bước sau:

  1. Tạo một thực thể của đối tượng nhà cung cấp Twitter:

    Web

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

    Web

    var provider = new firebase.auth.TwitterAuthProvider();
  2. Không bắt buộc: Để bản địa hoá quy trình OAuth của nhà cung cấp theo ngôn ngữ mà người dùng ưu tiên mà không cần truyền rõ ràng các tham số OAuth tuỳ chỉnh có liên quan, hãy cập nhật mã ngôn ngữ trên thực thể Auth trước khi bắt đầu quy trình OAuth. Ví dụ:

    Web

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

    Web

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  3. Không bắt buộc: Chỉ định các thông số bổ sung của nhà cung cấp OAuth tuỳ chỉnh mà bạn muốn gửi cùng với yêu cầu OAuth. Để thêm một tham số tuỳ chỉnh, hãy gọi setCustomParameters trên trình cung cấp đã khởi tạo bằng một đối tượng chứa khoá theo quy định trong tài liệu của trình cung cấp OAuth và giá trị tương ứng. Ví dụ:

    Web

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

    Web

    provider.setCustomParameters({
      'lang': 'es'
    });
    Bạn không được phép sử dụng các tham số OAuth bắt buộc đã được dành riêng và các tham số này sẽ bị bỏ qua. Hãy xem tài liệu tham khảo về trình cung cấp dịch vụ xác thực để biết thêm thông tin chi tiết.
  4. Xác thực bằng Firebase thông qua đối tượng nhà cung cấp Twitter. Bạn có thể nhắc người dùng đăng nhập bằng tài khoản Twitter của họ bằng cách mở một cửa sổ bật lên hoặc bằng cách chuyển hướng đến trang đăng nhập. Bạn nên sử dụng phương thức chuyển hướng trên thiết bị di động.
    • Để đăng nhập bằng cửa sổ bật lên, hãy gọi signInWithPopup:

      Web

      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;
          // IdP data available using getAdditionalUserInfo(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.customData.email;
          // The AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      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;
          // IdP data available in result.additionalUserInfo.profile.
            // ...
        }).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;
          // ...
        });
      Ngoài ra, xin lưu ý rằng bạn có thể truy xuất mã thông báo OAuth của nhà cung cấp Twitter. Mã thông báo này có thể dùng để tìm nạp dữ liệu bổ sung bằng cách sử dụng API Twitter.

      Đây cũng là nơi bạn có thể phát hiện và xử lý lỗi. Để xem danh sách mã lỗi, hãy xem Tài liệu tham khảo về hoạt động xác thực.

    • Để đăng nhập bằng cách chuyển hướng đến trang đăng nhập, hãy gọi signInWithRedirect: Làm theo các phương pháp hay nhất khi sử dụng `signInWithRedirect`.

      Web

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

      Web

      firebase.auth().signInWithRedirect(provider);
      Sau đó, bạn cũng có thể truy xuất mã thông báo OAuth của nhà cung cấp Twitter bằng cách gọi getRedirectResult khi trang của bạn tải:

      Web

      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;
          // IdP data available using getAdditionalUserInfo(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.customData.email;
          // The AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      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;
          // IdP data available in result.additionalUserInfo.profile.
            // ...
        }).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;
          // ...
        });
      Đây cũng là nơi bạn có thể phát hiện và xử lý lỗi. Để xem danh sách mã lỗi, hãy xem Tài liệu tham khảo về hoạt động xác thực.

Xử lý quy trình đăng nhập theo cách thủ công

Bạn cũng có thể xác thực bằng Firebase thông qua tài khoản Twitter bằng cách xử lý quy trình đăng nhập bằng cách gọi các điểm cuối OAuth của Twitter:

  1. Tích hợp tính năng xác thực bằng Twitter vào ứng dụng của bạn bằng cách làm theo tài liệu dành cho nhà phát triển. Khi kết thúc quy trình đăng nhập bằng Twitter, bạn sẽ nhận được mã truy cập OAuth và khoá bí mật OAuth.
  2. Nếu bạn cần đăng nhập vào một ứng dụng Node.js, hãy gửi mã truy cập OAuth và khoá bí mật OAuth đến ứng dụng Node.js.
  3. Sau khi người dùng đăng nhập thành công bằng Twitter, hãy trao đổi mã thông báo truy cập OAuth và bí mật OAuth để lấy thông tin đăng nhập Firebase:
    var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
  4. Xác thực bằng Firebase bằng thông tin đăng nhập Firebase:

    Web

    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.customData.email;
        // The AuthCredential type that was used.
        const credential = FacebookAuthProvider.credentialFromError(error);
        // ...
      });

    Web

    // 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;
        // ...
      });

Xác thực bằng Firebase trong tiện ích của Chrome

Nếu bạn đang tạo một ứng dụng tiện ích của Chrome, hãy xem hướng dẫn về Tài liệu ngoài màn hình.

Các bước tiếp theo

Sau khi người dùng đăng nhập lần đầu tiên, một tài khoản người dùng mới sẽ được tạo và liên kết với thông tin đăng nhập (tức là tên người dùng và mật khẩu, số điện thoại hoặc thông tin nhà cung cấp dịch vụ xác thực) mà người dùng đã đăng nhập. Tài khoản mới này được lưu trữ trong dự án Firebase của bạn và có thể dùng để xác định người dùng trên mọi ứng dụng trong dự án của bạn, bất kể người dùng đăng nhập bằng cách nào.

  • Trong các ứng dụng của bạn, cách được đề xuất để biết trạng thái uỷ quyền của người dùng là đặt một đối tượng theo dõi trên đối tượng Auth. Sau đó, bạn có thể lấy thông tin hồ sơ cơ bản của người dùng từ đối tượng User. Hãy xem phần Quản lý người dùng.

  • Trong Firebase Realtime DatabaseCloud Storage Quy tắc bảo mật, bạn có thể lấy mã nhận dạng người dùng riêng biệt của người dùng đã đăng nhập từ biến auth và dùng mã nhận dạng này để kiểm soát dữ liệu mà người dùng có thể truy cập.

Bạn có thể cho phép người dùng đăng nhập vào ứng dụng của bạn bằng nhiều trình cung cấp dịch vụ xác thực bằng cách liên kết thông tin đăng nhập của trình cung cấp dịch vụ xác thực với một tài khoản người dùng hiện có.

Để đăng xuất người dùng, hãy gọi signOut:

Web

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

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

Web

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