2016-09-17 21 views
12

Tôi đang sử dụng Xác thực Firebase trong ứng dụng Android và tôi đang sử dụng xác thực tài khoản Google làm tùy chọn đăng nhập vào ứng dụng.Kiểm tra xem người dùng có được xác thực lần đầu tiên trong Xác thực Google Firebase trong Android

Làm cách nào để biết liệu người dùng có đăng nhập vào ứng dụng lần đầu tiên hay không?

Mọi trợ giúp đều được đánh giá cao.

+0

Vì vậy, bạn muốn sử dụng lấy một danh sách tất cả người dùng sử dụng căn cứ hỏa lực Auth? –

+0

vâng, đó chính là điều tôi đang tìm kiếm – rainman

+0

Rất tiếc, bạn không thể sử dụng Autbase Firebase theo cách đó. Bạn sẽ phải làm theo những gì @NarenderReddy nói - mỗi lần người dùng đăng nhập lần đầu tiên bạn sẽ cần phải lưu trữ một số loại mục nhập bằng cách sử dụng Cơ sở dữ liệu Firebase (hoặc phương pháp lưu trữ ưa thích của bạn) cùng với thông tin bạn muốn theo dõi. Sau đó, bạn có thể sử dụng vị trí cơ sở dữ liệu đó để có danh sách tất cả người dùng. –

Trả lời

0
+0

Tôi đã chỉnh sửa câu hỏi của mình – rainman

+0

Tôi đã chỉnh sửa Câu trả lời của tôi cho một cái nhìn về nó –

+1

@adityashrivastava Câu hỏi SO của bạn đề cập đến cơ sở dữ liệu Firebase (Cơ sở dữ liệu thời gian thực) mà người dùng đã đặt. muốn có thể giải quyết nó chỉ với Firebase (Xác thực) – Lobato

-1

Khi đăng ký sử dụng cho lần đầu tiên yêu cầu ông cho đặt lại mật khẩu. Bạn có thể gửi một email khôi phục mật khẩu cho một người dùng với phương pháp sendPasswordResetEmail .. liên kết: https://firebase.google.com/docs/auth/android/manage-users

sau đó người dùng có được lựa chọn đặt lại mật khẩu và thay đổi mật khẩu và đăng nhập với chứng chỉ mới và nếu người dùng cung cấp cho sai id email sau đó anh ta có thể không đăng nhập ..

+0

Tôi chỉ muốn kiểm tra xem người dùng có đăng nhập lần đầu tiên hay không. Tôi không muốn đặt lại không có gì. – rainman

+0

sử dụng cơ sở dữ liệu thời gian thực firebase.khi người dùng đăng nhập tạo một đứa con để rootnode –

+0

Tôi đã nghĩ theo cách này nhưng trong giao diện điều khiển Firebase Auth, bạn có thể thấy tất cả người dùng đã đăng ký trong ứng dụng của bạn, vì vậy tôi đã nói đó là cách để truy xuất email của họ thí dụ ... – rainman

1

Một giải pháp khi bạn sử dụng căn cứ hỏa lực Auth cùng với FireStore

Kiến trúc thư mục gốc của cơ sở dữ liệu FireStore sẽ trông như thế này enter image description here

Sử dụng Firebase Auth currentUser.uid để tạo tài liệu gốc cho từng người dùng. Bắt đầu bằng cách thêm một trường được gọi là registered_at vào tài liệu gốc ngay sau khi người dùng được tạo lần đầu tiên và sau đó thêm các bộ sưu tập cụ thể vào tài liệu gốc của bạn tùy thuộc vào trường hợp sử dụng của bạn.

Khi đăng nhập hoặc đăng nhập, bạn có thể kiểm tra xem tài liệu có trường registered_at đã tồn tại chưa. Nếu nó chưa hề tồn tại, sau đó bạn có thể đối xử với người sử dụng như một người dùng mới (giả sử người dùng không thể xóa hoặc thay đổi lĩnh vực registered_at sau)

import com.google.firebase.auth.FirebaseAuth 
import com.google.firebase.firestore.DocumentReference 
import com.google.firebase.firestore.FirebaseFirestore 

fun rootDocument(): DocumentReference? = rootPath()?.let { 
    return fireStore().document(it) 
} 

fun rootPath(): String? { 
    val loggedInUser = loggedInUser() 
    if (loggedInUser != null) { 
     return "users/${loggedInUser.uid}" 
    } 
    return null 
} 

fun fireStore() = FirebaseFirestore.getInstance() 

fun createWriteBatch() = fireStore().batch() 

fun loggedInUser() = fireAuth().currentUser 

fun fireAuth(): FirebaseAuth = FirebaseAuth.getInstance() 

fun afterSignIn() { 

    val rootDocument = rootDocument() 
      ?: throw IllegalStateException("root document not found") 

    rootDocument.get().addOnCompleteListener { 
     val isNewUser = it.result.exists().not() 

     if (isNewUser) { 
      val batch = createWriteBatch() 

      batch.set(rootDocument, HashMap<Any, Any>().apply { 
       put("registered_at", System.currentTimeMillis()) 
      }) 

      batch.commit().addOnCompleteListener { 
       println("this is a new user") 
      } 

     } else { 
      println("this is not a new user") 
     } 
    } 
} 
0

Trong khi tôi hoàn toàn đồng ý rằng cách chính xác nhất (cho không thể thêm trường mới vào bảng người dùng xác thực) là tạo đường dẫn mới cho người dùng và lưu trữ thông tin ở đó, tôi không muốn thực hiện yêu cầu bổ sung sau khi đăng nhập để thực hiện việc kiểm tra này (Tôi đang sử dụng Firestore và yêu cầu = tiền).

Tôi cần thực hiện kiểm tra đăng nhập đầu tiên này để nhắc tên người dùng (khi tên hiển thị được lấy từ Facebook/Google và tôi muốn cung cấp tùy chọn ghi đè nếu đó là lần đăng nhập đầu tiên của họ). Những gì tôi đã kết thúc làm là sử dụng các tài sản photoURL như một lá cờ để xác định nếu nó là lần đầu tiên của họ hay không. Nó không phải là lý tưởng nhưng có thể ai đó muốn tiết kiệm yêu cầu có thể sử dụng điều này như một cách giải quyết. Nó không phải là một thỏa thuận lớn cho căn cứ hỏa lực nhưng đối với FireStore đó là tốn kém hơn đối với kế hoạch của bạn

2

Để kiểm tra xem đó là người dùng đăng lần đầu tiên trong, chỉ cần gọi phương thức AdditionalUserInfo.isNewUser() trong gọi lại OnCompleteListener.onComplete.

Mã ví dụ bên dưới, hãy nhớ kiểm tra giá trị rỗng.

OnCompleteListener<AuthResult> completeListener = new OnCompleteListener<AuthResult>() { 
     @Override 
     public void onComplete(@NonNull Task<AuthResult> task) { 
      if (task.isSuccessful()) { 
       boolean isNew = task.getResult().getAdditionalUserInfo().isNewUser(); 
       Log.d("MyTAG", "onComplete: " + (isNew ? "new user" : "old user")); 
      } 
     } 
    }; 

tham chiếu cho AdditionalUserInfo lớp
https://firebase.google.com/docs/reference/android/com/google/firebase/auth/AdditionalUserInfo

Các vấn đề liên quan