Xác thực bằng Google với JavaScript

Bạn có thể cho phép người dùng xác thực bằng Firebase bằng Tài khoản Google của họ. Bạn có thể sử dụng SDK Firebase để thực hiện quy trình đăng nhập bằng Google hoặc thực hiện quy trình đăng nhập theo cách thủ công bằng thư viện Đăng nhập bằng Google và chuyển mã thông báo mã nhận dạng thu được đến Firebase.

Trước khi bắt đầu

  1. Thêm Firebase vào dự án JavaScript của bạn.
  2. Bật Google làm phương thức đăng nhập trong bảng điều khiển của Firebase:
    1. Trong bảng điều khiển của Firebase, hãy mở mục Xác thực.
    2. Trên thẻ Sign in method (Phương thức đăng nhập), hãy bật phương thức đăng nhập của Google rồi nhấp vào Save (Lưu).

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

Nếu bạn đang tạo một ứng dụng web, thì cách dễ nhất để xác thực người dùng với Firebase bằng Tài khoản Google 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ác không phải trình duyệt, bạn phải xử lý luồng đă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 của Google:

    API mô-đun web

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

    API không gian tên trên web

    var provider = new firebase.auth.GoogleAuthProvider();
  2. Không bắt buộc: Chỉ định các phạm vi OAuth 2.0 khác mà bạn muốn yêu cầu từ nhà cung cấp dịch vụ xác thực. Để thêm một phạm vi, hãy gọi addScope. Ví dụ:

    API mô-đun web

    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');

    API không gian tên trên web

    provider.addScope('https://www.googleapis.com/auth/contacts.readonly');
    Hãy xem tài liệu về nhà cung cấp dịch vụ xác thực.
  3. Không bắt buộc: Để bản địa hoá quy trình OAuth của nhà cung cấp sang ngôn ngữ ưu tiên của người dùng mà không cần truyền các tham số OAuth tuỳ chỉnh có liên quan một cách rõ ràng, hãy cập nhật mã ngôn ngữ trên thực thể Xác thực trước khi bắt đầu quy trình OAuth. Ví dụ:

    API mô-đun 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();

    API không gian tên trên web

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  4. Không bắt buộc: Chỉ định các thông số khác của trì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 thông 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á như được chỉ định trong tài liệu về trình cung cấp OAuth và giá trị tương ứng. Ví dụ:

    API mô-đun web

    provider.setCustomParameters({
      'login_hint': 'user@example.com'
    });

    API không gian tên trên web

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

      API mô-đun web

      import { getAuth, signInWithPopup, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access the Google API.
          const credential = GoogleAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          // 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 = GoogleAuthProvider.credentialFromError(error);
          // ...
        });

      API không gian tên trên web

      firebase.auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a Google Access Token. You can use it to access the Google API.
          var token = credential.accessToken;
          // 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 Google. Mã này có thể dùng để tìm nạp thêm dữ liệu bằng API Google.

      Đây cũng là nơi bạn có thể phát hiện và xử lý các lỗi. Để biết danh sách mã lỗi, hãy xem Tài liệu tham khảo 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 phương thức "signInWith chuyển hướng".

      API mô-đun web

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

      API không gian tên trên 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 Google bằng cách gọi getRedirectResult khi trang của bạn tải:

      API mô-đun web

      import { getAuth, getRedirectResult, GoogleAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a Google Access Token. You can use it to access Google APIs.
          const credential = GoogleAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
      
          // 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 = GoogleAuthProvider.credentialFromError(error);
          // ...
        });

      API không gian tên trên web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a Google Access Token. You can use it to access the Google API.
            var token = credential.accessToken;
            // ...
          }
          // 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ý các lỗi. Để biết danh sách mã lỗi, hãy xem Tài liệu tham khảo xác thực.

Xác thực bằng Firebase trong một 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 (chẳng hạn như tên người dùng và mật khẩu, số điện thoại hoặc thông tin của 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ữ như một phần trong dự án Firebase và có thể được 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 ứng dụng của bạn, bạn nên đặt trình quan sát trên đối tượng Auth để biết trạng thái xác thực của người dùng. 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 Quy tắc bảo mật của Cloud Storage và Cơ sở dữ liệu theo thời gian thực của Firebase, 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 rồi sử dụng mã này để kiểm soát những 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 mình thông qua nhiều 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 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 một người dùng, hãy gọi signOut:

API mô-đun web

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

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

API không gian tên trên web

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