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 tính năng Xác thực Firebase 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 sẽ nhận được mã thông báo này và sử dụng mã đó để xác thực với Firebase.

Trước khi bắt đầu

  1. Trước khi có thể sử dụng tính năng Xác thực Firebase, bạn cần:

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

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

  2. Lấy khoá máy chủ của dự án:
    1. Chuyển đến trang Tài khoản dịch vụ trong phần cài đặt của dự án.
    2. Nhấp vào Generate New Private Key (Tạo khoá riêng tư mới) ở cuối mục SDK quản trị của Firebase trên trang Tài khoản dịch vụ.
    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 của bạn.

Xác thực bằng Firebase

Lớp FirebaseAuth là cổng vào cho tất cả lệnh gọi API. Bạn có thể truy cập tệp 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. Máy chủ của bạn sẽ kiểm tra thông tin xác thực và trả về một mã tuỳ chỉnh nếu 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ã đó đến Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync để đăng nhập vào tài khoản của 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 (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 các ứng dụng, 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 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():

auth.SignOut();