[ios,android] WIP - moving auth to promises & fixing ios <-> android discrepancies

This commit is contained in:
Salakar
2017-03-14 19:04:16 +00:00
parent b18a7a0d6a
commit 0914a9341c
3 changed files with 335 additions and 229 deletions
@@ -66,7 +66,9 @@ public class RNFirebaseAuth extends ReactContextBaseJavaModule {
return TAG;
}
/**
* Add a new auth state listener - if one doesn't exist already
*/
@ReactMethod
public void addAuthStateListener() {
if (mAuthListener == null) {
@@ -179,36 +181,109 @@ public class RNFirebaseAuth extends ReactContextBaseJavaModule {
});
}
/**
* signInWithEmailAndPassword
*
* @param email
* @param password
* @param promise
*/
@ReactMethod
public void signInWithEmail(final String email, final String password, final Callback callback) {
public void signInWithEmailAndPassword(final String email, final String password, final Promise promise) {
Log.d(TAG, "signInWithEmailAndPassword");
mAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
try {
if (task.isSuccessful()) {
userCallback(task.getResult().getUser(), callback);
} else {
userErrorCallback(task, callback);
}
} catch (Exception ex) {
userExceptionCallback(ex, callback);
}
public void onSuccess(AuthResult authResult) {
Log.d(TAG, "signInWithEmailAndPassword:onComplete:success");
promiseWithUser(authResult.getUser(), promise);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
WritableMap error = authExceptionToMap(exception);
Log.e(TAG, "signInWithEmailAndPassword:onComplete:failure", exception);
promise.reject(error.getString("code"), error.getString("message"), exception);
}
});
}
/**
* signInWithCustomToken
*
* @param token
* @param promise
*/
@ReactMethod
public void signInWithCustomToken(final String token, final Promise promise) {
Log.d(TAG, "signInWithCustomToken");
mAuth.signInWithCustomToken(token)
.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
@Override
public void onSuccess(AuthResult authResult) {
Log.d(TAG, "signInWithCustomToken:onComplete:success");
promiseWithUser(authResult.getUser(), promise);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
WritableMap error = authExceptionToMap(exception);
Log.e(TAG, "signInWithCustomToken:onComplete:failure", exception);
promise.reject(error.getString("code"), error.getString("message"), exception);
}
});
}
@ReactMethod
public void signInWithProvider(final String provider, final String authToken, final String authSecret, final Callback callback) {
if (provider.equals("facebook")) {
this.facebookLogin(authToken, callback);
} else if (provider.equals("google")) {
this.googleLogin(authToken, callback);
} else
// TODO
Utils.todoNote(TAG, "signInWithProvider", callback);
public void delete(final Promise promise) {
FirebaseUser user = mAuth.getCurrentUser();
Log.d(TAG, "delete");
if (user != null) {
user.delete()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "delete:onComplete:success");
promiseNoUser(promise, false);
} else {
Exception exception = task.getException();
WritableMap error = authExceptionToMap(exception);
Log.e(TAG, "delete:onComplete:failure", exception);
promise.reject(error.getString("code"), error.getString("message"), exception);
}
}
});
} else {
Log.e(TAG, "signInWithCustomToken:onComplete:failure:noCurrentUser");
promiseNoUser(promise, true);
}
}
/**
* signInWithCredential
* TODO
*
* @param provider
* @param authToken
* @param authSecret
* @param promise
*/
@ReactMethod
public void signInWithCredential(final String provider, final String authToken, final String authSecret, final Promise promise) {
switch (provider) {
case "facebook":
//facebookLogin(authToken, callback);
break;
case "google":
//googleLogin(authToken, callback);
default:
promise.reject("auth/invalid_provider", "The provider specified is invalid.");
}
}
@ReactMethod
@@ -248,26 +323,6 @@ public class RNFirebaseAuth extends ReactContextBaseJavaModule {
Utils.todoNote(TAG, "linkWithProvider", callback);
}
@ReactMethod
public void signInWithCustomToken(final String customToken, final Callback callback) {
mAuth.signInWithCustomToken(customToken)
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
Log.d(TAG, "signInWithCustomToken:onComplete:" + task.isSuccessful());
try {
if (task.isSuccessful()) {
userCallback(task.getResult().getUser(), callback);
} else {
userErrorCallback(task, callback);
}
} catch (Exception ex) {
userExceptionCallback(ex, callback);
}
}
});
}
@ReactMethod
public void reauthenticate(final String provider, final String authToken, final String authSecret, final Callback callback) {
// TODO:
@@ -350,35 +405,6 @@ public class RNFirebaseAuth extends ReactContextBaseJavaModule {
});
}
@ReactMethod
public void delete(final Callback callback) {
FirebaseUser user = mAuth.getCurrentUser();
if (user != null) {
user.delete()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
try {
if (task.isSuccessful()) {
Log.d(TAG, "User account deleted");
WritableMap resp = Arguments.createMap();
resp.putString("status", "complete");
resp.putString("msg", "User account deleted");
callback.invoke(null, resp);
} else {
userErrorCallback(task, callback);
}
} catch (Exception ex) {
userExceptionCallback(ex, callback);
}
}
});
} else {
callbackNoUser(callback, true);
}
}
@ReactMethod
public void sendEmailVerification(final Callback callback) {
FirebaseUser user = mAuth.getCurrentUser();
@@ -638,17 +664,28 @@ public class RNFirebaseAuth extends ReactContextBaseJavaModule {
final Boolean verified = user.isEmailVerified();
final Uri photoUrl = user.getPhotoUrl();
userMap.putString("email", email);
userMap.putString("uid", uid);
userMap.putString("providerId", provider);
userMap.putBoolean("emailVerified", verified);
userMap.putBoolean("isAnonymous", user.isAnonymous());
if (email != null) {
userMap.putString("email", email);
} else {
userMap.putNull("email");
}
if (name != null) {
userMap.putString("name", name);
userMap.putString("displayName", name);
} else {
userMap.putNull("displayName");
}
if (photoUrl != null) {
userMap.putString("photoURL", photoUrl.toString());
} else {
userMap.putNull("photoURL");
}
return userMap;