Xác thực với Firebase trong JavaScript bằng hệ thống xác thực tuỳ chỉnh

Bạn có thể tích hợp Firebase Authentication với một hệ thống xác thực tuỳ chỉnh bằng cách sửa đổi máy chủ xác thực để tạo mã thông báo đã ký tuỳ chỉnh khi người dùng đăng nhập thành công. Ứng dụng của bạn sẽ nhận được mã thông báo này và dùng mã đó để xác thực với Firebase.

Trước khi bắt đầu

  1. Thêm Firebase vào dự án JavaScript.
  2. Lấy khoá máy chủ của dự án:
    1. Trong bảng điều khiển Firebase, hãy chuyển đến phần cài đặt Settings > thẻ Service accounts.
    2. Ở cuối phần SDK của Firebase dành cho quản trị viên, hãy nhấp vào Tạo khoá riêng tư mới.
    3. Cặp khoá công khai/riêng tư của tài khoản dịch vụ mới sẽ tự động được lưu trên máy tính của bạn. Sao chép tệp này vào máy chủ xác thực.

Xác thực bằng Firebase

  1. Khi người dùng đăng nhập vào ứng dụng của bạn, hãy gửi thông tin đăng nhập của họ (ví dụ: tên người dùng và mật khẩu) đến máy chủ xác thực. Máy chủ của bạn sẽ kiểm tra thông tin đăng nhập và trả về mã thông báo tuỳ chỉnh nếu thông tin đó hợp lệ.
  2. Sau khi nhận được mã thông báo tuỳ chỉnh từ máy chủ xác thực, hãy truyền mã đó đến signInWithCustomToken để đăng nhập người dùng:

    Web

    import { getAuth, signInWithCustomToken } from "firebase/auth";
    
    const auth = getAuth();
    signInWithCustomToken(auth, token)
      .then((userCredential) => {
        // Signed in
        const user = userCredential.user;
        // ...
      })
      .catch((error) => {
        const errorCode = error.code;
        const errorMessage = error.message;
        // ...
      });

    Web

    firebase.auth().signInWithCustomToken(token)
      .then((userCredential) => {
        // Signed in
        var user = userCredential.user;
        // ...
      })
      .catch((error) => {
        var errorCode = error.code;
        var errorMessage = error.message;
        // ...
      });

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 đã 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, bất kể cách người dùng đăng nhập.

  • Trong ứng dụng, cách hay nhất để biết trạng thái xác thực của người dùng là đặt một trình quan sát trên đối tượng Auth. Sau đó, bạn có thể lấy thông tin cơ bản về hồ sơ của người dùng từ đối tượng User. Xem bài viết 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ã đó để 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 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 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.
});