Skip to content

Fix a bug where sign in with email link always return isNewUser as false #2363

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 8, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 49 additions & 25 deletions Firebase/Auth/Source/FIRAuth.m
Original file line number Diff line number Diff line change
Expand Up @@ -616,16 +616,16 @@ - (void)signInWithGameCenterCredential:(FIRGameCenterAuthCredential *)credential
}];
}

/** @fn internalSignInWithEmail:link:completion:
/** @fn internalSignInAndRetrieveDataWithEmail:link:completion:
@brief Signs in using an email and email sign-in link.
@param email The user's email address.
@param link The email sign-in link.
@param callback A block which is invoked when the sign in finishes (or is cancelled.) Invoked
asynchronously on the global auth work queue in the future.
*/
- (void)internalSignInWithEmail:(nonnull NSString *)email
link:(nonnull NSString *)link
callback:(nullable FIRAuthResultCallback)callback {
- (void)internalSignInAndRetrieveDataWithEmail:(nonnull NSString *)email
link:(nonnull NSString *)link
callback:(nullable FIRAuthDataResultCallback)callback {
if (![self isSignInWithEmailLink:link]) {
[FIRAuthExceptionUtils raiseInvalidParameterExceptionWithReason:
kInvalidEmailSignInLinkExceptionMessage];
Expand All @@ -647,14 +647,34 @@ - (void)internalSignInWithEmail:(nonnull NSString *)email
callback:^(FIREmailLinkSignInResponse *_Nullable response,
NSError *_Nullable error) {
if (error) {
callback(nil, error);
if (callback) {
callback(nil, error);
}
return;
}
[self completeSignInWithAccessToken:response.IDToken
accessTokenExpirationDate:response.approximateExpirationDate
refreshToken:response.refreshToken
anonymous:NO
callback:callback];
callback:^(FIRUser *_Nullable user, NSError *_Nullable error) {
if (error) {
if (callback) {
callback(nil, error);
}
return;
}
FIRAdditionalUserInfo *additionalUserInfo =
[[FIRAdditionalUserInfo alloc] initWithProviderID:FIREmailAuthProviderID
profile:nil
username:nil
isNewUser:response.isNewUser];
FIRAuthDataResult *result = user ?
[[FIRAuthDataResult alloc] initWithUser:user
additionalUserInfo:additionalUserInfo] : nil;
if (callback) {
callback(result, error);
}
}];
}];
}

Expand Down Expand Up @@ -695,27 +715,31 @@ - (void)internalSignInAndRetrieveDataWithCredential:(FIRAuthCredential *)credent
// Special case for email/password credentials
FIREmailPasswordAuthCredential *emailPasswordCredential =
(FIREmailPasswordAuthCredential *)credential;
FIRAuthResultCallback completeEmailSignIn = ^(FIRUser *user, NSError *error) {
if (callback) {
if (error) {
callback(nil, error);
return;
}
FIRAdditionalUserInfo *additionalUserInfo =
[[FIRAdditionalUserInfo alloc] initWithProviderID:FIREmailAuthProviderID
profile:nil
username:nil
isNewUser:NO];
FIRAuthDataResult *result = [[FIRAuthDataResult alloc] initWithUser:user
additionalUserInfo:additionalUserInfo];
callback(result, error);
}
};

if (emailPasswordCredential.link) {
[self internalSignInWithEmail:emailPasswordCredential.email
link:emailPasswordCredential.link
callback:completeEmailSignIn];
// Email link sign in
[self internalSignInAndRetrieveDataWithEmail:emailPasswordCredential.email
link:emailPasswordCredential.link
callback:callback];
} else {
// Email password sign in
FIRAuthResultCallback completeEmailSignIn = ^(FIRUser *user, NSError *error) {
if (callback) {
if (error) {
callback(nil, error);
return;
}
FIRAdditionalUserInfo *additionalUserInfo =
[[FIRAdditionalUserInfo alloc] initWithProviderID:FIREmailAuthProviderID
profile:nil
username:nil
isNewUser:NO];
FIRAuthDataResult *result = [[FIRAuthDataResult alloc] initWithUser:user
additionalUserInfo:additionalUserInfo];
callback(result, error);
}
};

[self signInWithEmail:emailPasswordCredential.email
password:emailPasswordCredential.password
callback:completeEmailSignIn];
Expand Down