Xác thực bằng Firebase bằng Tài khoản dựa trên mật khẩu bằng Unity

Bạn có thể dùng Firebase Authentication để cho phép người dùng xác thực bằng Firebase thông qua địa chỉ email và mật khẩu của họ, đồng thời quản lý các tài khoản dựa trên mật khẩu của ứng dụng.

Trước khi bắt đầu

Trước khi có thể sử dụng Firebase Authentication, bạn cần:

  • Đăng ký dự án Unity và định cấu hình dự án đó để sử dụng Firebase.

    • Nếu dự án Unity của bạn đã sử dụng Firebase, thì dự án đó đã được đăng ký và định cấu hình cho Firebase.

    • Nếu không có dự án Unity, bạn có thể tải xuống ứng dụng mẫu.

  • Thêm Firebase Unity SDK (cụ thể là FirebaseAuth.unitypackage) vào dự án Unity.

Xin lưu ý rằng việc thêm Firebase vào dự án Unity bao gồm cả các tác vụ trong bảng điều khiển của Firebase và trong dự án Unity đang mở (ví dụ: bạn tải tệp cấu hình Firebase xuống từ bảng điều khiển, sau đó di chuyển các tệp đó vào dự án Unity).Firebase

Truy cập vào lớp Firebase.Auth.FirebaseAuth

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

Tạo tài khoản dựa trên mật khẩu

Để tạo tài khoản người dùng mới bằng mật khẩu, hãy hoàn tất các bước sau trong mã đăng nhập của ứng dụng:

  1. Khi người dùng mới đăng ký bằng biểu mẫu đăng ký của ứng dụng, hãy hoàn tất mọi bước xác thực tài khoản mới mà ứng dụng yêu cầu, chẳng hạn như xác minh rằng mật khẩu của tài khoản mới được nhập chính xác và đáp ứng các yêu cầu về độ phức tạp.
  2. Tạo tài khoản mới bằng cách truyền địa chỉ email và mật khẩu của người dùng mới vào FirebaseAuth.CreateUserWithEmailAndPassword:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

Đăng nhập người dùng bằng địa chỉ email và mật khẩu

Các bước đăng nhập người dùng bằng mật khẩu cũng tương tự như các bước tạo tài khoản mới. Trong hàm đăng nhập của ứng dụng, hãy làm như sau:

  1. Khi người dùng đăng nhập vào ứng dụng của bạn, hãy truyền địa chỉ email và mật khẩu của người dùng vào FirebaseAuth.SignInWithEmailAndPassword:
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync 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);
    });
  2. Bạn cũng có thể tạo thông tin xác thực và đăng nhập như các quy trình khác:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync 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);
    });

Nên làm: Đặt chính sách mật khẩu

Bạn có thể cải thiện độ bảo mật của tài khoản bằng cách thực thi các yêu cầu về độ phức tạp của mật khẩu.

Để định cấu hình chính sách mật khẩu cho dự án, hãy mở phần Chính sách mật khẩu trong thẻ Bảo mật > Xác thực > Cài đặt của Firebase bảng điều khiển:

Cài đặt xác thực

Firebase Authentication chính sách mật khẩu hỗ trợ các yêu cầu sau về mật khẩu:

  • Cần có ký tự viết thường

  • Cần có ký tự viết hoa

  • Cần có ký tự số

  • Cần có ký tự không phải chữ và số

    Các ký tự sau đây đáp ứng yêu cầu về ký tự không phải chữ và số: ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~

  • Độ dài tối thiểu của mật khẩu (từ 6 đến 30 ký tự; mặc định là 6)

  • Độ dài tối đa của mật khẩu (tối đa 4096 ký tự)

Bạn có thể bật chế độ thực thi chính sách mật khẩu theo hai chế độ:

  • Yêu cầu: Các lần đăng ký sẽ không thành công cho đến khi người dùng cập nhật mật khẩu tuân thủ chính sách của bạn.

  • Thông báo: Người dùng được phép đăng ký bằng mật khẩu không tuân thủ. Khi sử dụng chế độ này, bạn nên kiểm tra xem mật khẩu của người dùng có tuân thủ chính sách ở phía máy khách hay không và nhắc người dùng cập nhật mật khẩu nếu mật khẩu đó không tuân thủ.

Người dùng mới luôn phải chọn mật khẩu tuân thủ chính sách của bạn.

Nếu bạn có người dùng đang hoạt động, thì bạn không nên bật chế độ buộc nâng cấp khi đăng nhập, trừ phi bạn dự định chặn quyền truy cập của những người dùng có mật khẩu không tuân thủ chính sách của bạn. Thay vào đó, hãy sử dụng chế độ thông báo. Chế độ này cho phép người dùng đăng nhập bằng mật khẩu hiện tại và thông báo cho họ về những yêu cầu mà mật khẩu của họ chưa đáp ứng.

Nên làm: Bật tính năng bảo vệ việc liệt kê email

Một số phương thức Firebase Authentication lấy địa chỉ email làm tham số sẽ đưa ra các lỗi cụ thể nếu địa chỉ email chưa đăng ký khi phải đăng ký (ví dụ: khi đăng nhập bằng địa chỉ email và mật khẩu) hoặc đã đăng ký khi phải chưa sử dụng (ví dụ: khi thay đổi địa chỉ email của người dùng). Mặc dù điều này có thể hữu ích khi đề xuất các biện pháp khắc phục cụ thể cho người dùng, nhưng các tác nhân độc hại cũng có thể lợi dụng điều này để khám phá địa chỉ email mà người dùng của bạn đã đăng ký.

Để giảm thiểu rủi ro này, bạn nên bật tính năng bảo vệ việc liệt kê email cho dự án của mình bằng công cụ gcloud của Google Cloud. Xin lưu ý rằng việc bật tính năng này sẽ thay đổi hành vi báo cáo lỗi của Firebase Authentication's: hãy đảm bảo rằng ứng dụng của bạn không dựa vào các lỗi cụ thể hơn.

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

  • Trong ứng dụng, 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 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ã người dùng duy nhất của người dùng đã đăng nhập từ biến auth, và dùng mã 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 mình 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 xác thực của nhà cung cấp dịch vụ xác thực với 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();