Xác thực bằng Firebase bằng hệ thống xác thực tuỳ chỉnh và Unity

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 ra các 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ã thông báo đó để xác thực bằng Firebase.

Trước khi bắt đầu

  1. Để có thể sử dụng Firebase Authentication, bạn cần phải:

    • Đăng ký dự án Unity với dự án Firebase.
    • Thêm Firebase Unity SDK (cụ thể là FirebaseAuth.unitypackage) vào dự án Unity của bạn.

    Xem hướng dẫn chi tiết về các bước thiết lập ban đầu này trong phần Thêm Firebase vào dự án Unity.

  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 thẻ Cài đặt > Tài khoản dịch vụ.
    2. Ở cuối phần SDK của Firebase dành cho quản trị viên, hãy nhấp vào Generate New Private Key (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 lưu vào 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

Lớp FirebaseAuth là cổng cho tất cả các lệnh gọi API. Bạn có thể truy cập vào đối tượng này thông qua FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

Gọi Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync bằng mã thông báo từ máy chủ xác thực của bạn.

  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 của bạn. Máy chủ của bạn kiểm tra thông tin đăng nhập và trả về một mã thông báo tuỳ chỉnh nếu thông tin đó hợp lệ.
  2. Sau khi bạn nhận được mã thông báo tuỳ chỉnh từ máy chủ xác thực, hãy truyền mã thông báo đó đến Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync để đăng nhập cho người dùng:
    auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCustomTokenAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

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ụ uỷ quyền) 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 một người dùng trên mọi ứng dụng trong dự á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 mình, bạn có thể lấy thông tin hồ sơ cơ bản của người dùng từ đối tượng Firebase.Auth.FirebaseUser:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • 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 đó để 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():

auth.SignOut();