From ed409a2c7a04a8cfc832bf05ffb3b4912ce53dcd Mon Sep 17 00:00:00 2001 From: kphayen Date: Mon, 7 Nov 2016 17:52:49 -0700 Subject: [PATCH] Implement reauthenticateWithCredentialForProvider for Android --- .../io/fullstack/firestack/FirestackAuth.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/io/fullstack/firestack/FirestackAuth.java b/android/src/main/java/io/fullstack/firestack/FirestackAuth.java index 7c0c2bb..d171c90 100644 --- a/android/src/main/java/io/fullstack/firestack/FirestackAuth.java +++ b/android/src/main/java/io/fullstack/firestack/FirestackAuth.java @@ -187,10 +187,41 @@ public void onComplete(@NonNull Task task) { @ReactMethod public void reauthenticateWithCredentialForProvider(final String provider, final String authToken, final String authSecret, final Callback callback) { - // TODO: - FirestackUtils.todoNote(TAG, "reauthenticateWithCredentialForProvider", callback); - // AuthCredential credential; - // Log.d(TAG, "reauthenticateWithCredentialForProvider called with: " + provider); + AuthCredential credential; + + if (provider.equals("facebook")) { + credential = FacebookAuthProvider.getCredential(authToken); + } else if (provider.equals("google")) { + credential = GoogleAuthProvider.getCredential(authToken, null); + } else { + // TODO: + FirestackUtils.todoNote(TAG, "reauthenticateWithCredentialForProvider", callback); + // AuthCredential credential; + // Log.d(TAG, "reauthenticateWithCredentialForProvider called with: " + provider); + return; + } + + FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); + if (user != null) { + user.reauthenticate(credential) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "User re-authenticated with " + provider); + FirebaseUser u = FirebaseAuth.getInstance().getCurrentUser(); + userCallback(u, callback); + } else { + userErrorCallback(task, callback); + } + } + }); + } else { + WritableMap err = Arguments.createMap(); + err.putInt("errorCode", NO_CURRENT_USER); + err.putString("errorMessage", "No current user"); + callback.invoke(err); + } } @ReactMethod