Người dùng trong các dự án Firebase

Đối tượng người dùng Firebase đại diện cho một tài khoản người dùng đã ký một ứng dụng trong dự án. Ứng dụng thường có nhiều người dùng đã đăng ký và mỗi ứng dụng trong một dự án sẽ chia sẻ cơ sở dữ liệu người dùng.

Các thực thể người dùng độc lập với các thực thể Firebase Authentication, vì vậy, bạn có thể có một số tham chiếu đến người dùng khác nhau trong cùng một ngữ cảnh và vẫn gọi bất kỳ về phương pháp của họ.

Thuộc tính người dùng

Người dùng Firebase có một tập hợp các thuộc tính cơ bản cố định — một tập hợp duy nhất Giấy tờ tuỳ thân, địa chỉ email chính, tên và URL ảnh – được lưu trữ trong cơ sở dữ liệu người dùng của dự án, có thể được người dùng cập nhật (iOS, Android, web). Bạn không thể trực tiếp thêm các thuộc tính khác vào đối tượng người dùng; thay vào đó, bạn có thể lưu trữ các tài sản bổ sung trong bất kỳ dịch vụ lưu trữ nào khác, chẳng hạn như Google Cloud Firestore.

Vào lần đầu tiên người dùng đăng ký ứng dụng của bạn, hệ thống sẽ điền dữ liệu hồ sơ của người dùng đó bằng cách sử dụng thông tin có sẵn:

  • Nếu người dùng đăng ký bằng địa chỉ email và mật khẩu, thì chỉ địa chỉ email và mật khẩu đã điền sẵn thuộc tính địa chỉ email
  • Nếu người dùng đăng ký với một nhà cung cấp danh tính được liên kết, chẳng hạn như Google hoặc Facebook, thông tin tài khoản do nhà cung cấp cung cấp sẽ được dùng để điền sẵn vào hồ sơ của người dùng
  • Nếu người dùng đã đăng ký bằng hệ thống xác thực tuỳ chỉnh của bạn, bạn phải thêm thông tin bạn muốn hiển thị trong hồ sơ của người dùng

Sau khi tạo tài khoản người dùng, bạn có thể tải lại thông tin của người dùng để kết hợp mọi thay đổi mà người dùng có thể đã thực hiện trên thiết bị khác.

Nhà cung cấp dịch vụ đăng nhập

Bạn có thể đăng nhập người dùng vào ứng dụng của mình bằng một số phương pháp: địa chỉ email và mật khẩu, các nhà cung cấp danh tính được liên kết và thông tin xác thực tuỳ chỉnh của bạn hệ thống. Bạn có thể liên kết nhiều phương thức đăng nhập với một người dùng, ví dụ: người dùng có thể đăng nhập vào cùng một tài khoản bằng địa chỉ email và mật khẩu, hoặc bằng tính năng Đăng nhập bằng Google.

Các thực thể người dùng theo dõi mọi nhà cung cấp được liên kết với người dùng. Điều này cho phép bạn để cập nhật các thuộc tính của hồ sơ trống bằng cách sử dụng thông tin do nhà cung cấp cung cấp. Xem mục Quản lý người dùng (iOS, Android, web).

Người dùng hiện tại

Khi người dùng đăng ký hoặc đăng nhập, người dùng đó sẽ trở thành người dùng hiện tại của Thực thể xác thực. Phiên bản này sẽ duy trì trạng thái của người dùng để làm mới trang (trong trình duyệt) hoặc việc khởi động lại ứng dụng sẽ không làm mất thông tin của bạn.

Khi người dùng đăng xuất, thực thể Xác thực sẽ ngừng lưu lại tham chiếu đến người dùng đối tượng và không còn duy trì trạng thái của đối tượng đó nữa; hiện không có người dùng. Tuy nhiên, thực thể người dùng tiếp tục hoạt động đầy đủ chức năng: nếu bạn giữ lại tham chiếu đến nó, bạn vẫn có thể truy cập và cập nhật dữ liệu của người dùng.

Vòng đời của người dùng

Bạn nên theo dõi trạng thái hiện tại của phiên bản Xác thực bằng cách sử dụng trình nghe (còn được gọi là "trình quan sát" trong JavaScript). Trình nghe xác thực sẽ nhận được thông báo bất cứ khi nào có sự cố có liên quan xảy ra với đối tượng Xác thực. Xem phần Quản lý Người dùng (iOS, Android, web).

Trình nghe xác thực sẽ được thông báo trong các trường hợp sau:

  • Đối tượng Xác thực kết thúc quá trình khởi chạy và một người dùng đã được đăng nhập từ một phiên trước đó hoặc đã bị chuyển hướng từ thông tin đăng nhập của một nhà cung cấp danh tính luồng
  • Một người dùng đăng nhập (người dùng hiện tại được đặt)
  • Người dùng đăng xuất (người dùng hiện tại trở thành người dùng rỗng)
  • Mã truy cập của người dùng hiện tại sẽ được làm mới. Trường hợp này có thể xảy ra trong các điều kiện sau:
    • Mã truy cập hết hạn: đây là trường hợp thường gặp. Mã làm mới là được dùng để nhận một bộ mã thông báo hợp lệ mới.
    • Người dùng đã thay đổi mật khẩu của họ: Firebase cấp quyền truy cập mới và làm mới mã thông báo, đồng thời hiển thị các mã thông báo cũ đã hết hạn. Tự động hết hạn mã thông báo của người dùng và/hoặc đăng xuất người dùng trên mọi thiết bị, cho vì lý do bảo mật.
    • Người dùng xác thực lại: một số hành động yêu cầu quyền của người dùng thông tin xác thực được cấp gần đây; những hành động như vậy bao gồm xoá tài khoản, đặt địa chỉ email chính và thay đổi mật khẩu. Thay vì đăng xuất người dùng rồi đăng nhập lại người dùng, hãy lấy tài khoản mới thông tin đăng nhập từ người dùng rồi chuyển thông tin đăng nhập mới vào xác thực lại của đối tượng người dùng.

Người dùng tự phục vụ

Theo mặc định, Firebase cho phép người dùng đăng ký và xoá tài khoản của họ mà không có sự can thiệp của quản trị. Trong nhiều trường hợp, điều này cho phép người dùng cuối khám phá ra ứng dụng hoặc dịch vụ của bạn và tham gia (hoặc rời khỏi) ma sát tối thiểu.

Tuy nhiên, có những trường hợp mà bạn muốn người dùng truy cập theo cách thủ công hoặc do quản trị viên tạo theo phương thức lập trình, bằng cách sử dụng SDK dành cho quản trị viên hoặc Bảng điều khiển Firebase. Trong những trường hợp này, bạn có thể vô hiệu hoá các thao tác của người dùng trong phần Cài đặt Firebase Authentication để ngăn người dùng cuối tạo và xoá tài khoản. Nếu đang sử dụng mô hình đa khách hàng, bạn sẽ cần tạo yêu cầu HTTP vô hiệu hoá các tính năng này trên cơ sở từng đối tượng thuê.

Nếu người dùng cuối cố gắng tạo hoặc xoá tài khoản trong hệ thống của bạn, Dịch vụ của Firebase sẽ trả về mã lỗi: auth/admin-restricted-operation đối với lệnh gọi API Web hoặc ERROR_ADMIN_RESTRICTED_OPERATION đối với Android và iOS. Bạn nên thanh lịch xử lý lỗi trên giao diện người dùng của bạn bằng cách yêu cầu người dùng thực hiện cho dịch vụ của mình.

Mã thông báo xác thực

Khi bạn thực hiện xác thực bằng Firebase, sẽ có ba các loại mã thông báo xác thực mà bạn có thể gặp phải:

Firebase mã thông báo mã nhận dạng Do Firebase tạo khi người dùng đăng nhập vào ứng dụng. Các mã thông báo là các JWT đã ký giúp nhận dạng người dùng một cách an toàn trong Dự án Firebase. Những mã thông báo này chứa thông tin hồ sơ cơ bản cho người dùng, bao gồm chuỗi mã nhận dạng của người dùng. Đây là chuỗi duy nhất cho Dự án Firebase. Bởi vì tính toàn vẹn của mã thông báo nhận dạng xác minh được, bạn có thể gửi chúng đến máy chủ phụ trợ để xác định người dùng hiện đang đăng nhập.
Mã thông báo của nhà cung cấp danh tính Do các nhà cung cấp danh tính liên kết, chẳng hạn như Google và Facebook tạo. Những mã thông báo này có thể có nhiều định dạng, nhưng thường là quyền truy cập OAuth 2.0 mã thông báo. Các ứng dụng dùng những mã thông báo này để xác minh rằng người dùng đã thực hiện thành công được xác thực với nhà cung cấp danh tính rồi chuyển đổi họ thành thông tin xác thực mà các dịch vụ của Firebase có thể sử dụng.
Firebase mã thông báo tuỳ chỉnh Do hệ thống xác thực tuỳ chỉnh của bạn tạo để cho phép người dùng đăng nhập vào một ứng dụng bằng cách sử dụng hệ thống xác thực của bạn. Mã thông báo tuỳ chỉnh là JWT được ký bằng khoá riêng tư của tài khoản dịch vụ. Ứng dụng dùng những mã thông báo này giống như dùng những mã thông báo được trả về từ các nhà cung cấp danh tính được liên kết.

Địa chỉ email đã xác minh

Firebase sẽ coi email đã được xác minh nếu đáp ứng hai điều kiện:

  1. Người dùng hoàn tất quy trình xác minh Firebase
  2. Email đó được một Nhà cung cấp danh tính (hay IdP) đáng tin cậy xác minh.

Những nhà cung cấp danh tính xác minh email một lần nhưng sau đó cho phép người dùng thay đổi địa chỉ email mà không cần xác minh lại sẽ không đáng tin cậy. Những nhà cung cấp danh tính (IdP) sở hữu miền hoặc luôn yêu cầu xác minh sẽ được coi là đáng tin cậy.

Nhà cung cấp đáng tin cậy:

  • Google (đối với địa chỉ @gmail.com)
  • Yahoo (đối với địa chỉ @yahoo.com)
  • Microsoft (đối với địa chỉ @outlook.com và @hotmail.com)
  • Apple (luôn xác minh vì tài khoản luôn được xác minh và xác thực đa yếu tố)

Nhà cung cấp không đáng tin cậy:

  • Facebook
  • Twitter
  • GitHub
  • Google, Yahoo và Microsoft cho các miền không phải do Nhà cung cấp danh tính đó cấp
  • Email / Mật khẩu không cần xác minh email

Trong một số trường hợp, Firebase sẽ tự động liên kết các tài khoản khi người dùng đăng nhập bằng nhiều nhà cung cấp bằng cùng một địa chỉ email. Tuy nhiên, việc này chỉ có thể xảy ra khi một số tiêu chí cụ thể được đáp ứng. Để hiểu lý do, hãy xem xét tình huống sau: một người dùng đăng nhập bằng Google bằng tài khoản @gmail.com và một đối tượng xấu tạo một tài khoản sử dụng cùng một địa chỉ @gmail.com nhưng đăng nhập qua Facebook. Nếu hai tài khoản này được liên kết tự động thì kẻ xấu sẽ giành được quyền truy cập vào tài khoản của người dùng.

Các trường hợp sau đây mô tả trường hợp chúng tôi tự động liên kết các tài khoản và khi chúng tôi báo lỗi và yêu cầu người dùng hoặc nhà phát triển hành động:

  • Người dùng đăng nhập bằng một nhà cung cấp không đáng tin cậy, sau đó đăng nhập bằng một nhà cung cấp không đáng tin cậy khác bằng chính email đó (ví dụ: Facebook rồi đến GitHub). Điều này sẽ tạo ra lỗi yêu cầu liên kết tài khoản.
  • Người dùng đăng nhập thông qua một nhà cung cấp đáng tin cậy, sau đó đăng nhập thông qua nhà cung cấp không tin cậy đó bằng chính email đó (ví dụ: Google, rồi đến Facebook). Điều này sẽ tạo ra lỗi yêu cầu liên kết tài khoản.
  • Người dùng đăng nhập bằng một nhà cung cấp không đáng tin cậy, sau đó đăng nhập bằng một nhà cung cấp đáng tin cậy bằng chính email đó (ví dụ: Facebook rồi đến Google). Nhà cung cấp đáng tin cậy sẽ ghi đè nhà cung cấp không đáng tin cậy. Nếu người dùng cố gắng đăng nhập lại bằng Facebook, điều này sẽ gây ra lỗi yêu cầu liên kết tài khoản.
  • Người dùng đăng nhập thông qua một nhà cung cấp đáng tin cậy, sau đó đăng nhập bằng một nhà cung cấp đáng tin cậy khác bằng chính email đó (ví dụ: Apple rồi đến Google). Cả hai nhà cung cấp này sẽ được liên kết mà không gặp lỗi.

Bạn có thể thiết lập email là đã được xác minh theo cách thủ công bằng cách sử dụng SDK dành cho quản trị viên. Tuy nhiên, bạn chỉ nên làm việc này nếu biết người dùng thực sự sở hữu email đó.