File tree 5 files changed +35
-6
lines changed
packages-exp/auth-exp/src
5 files changed +35
-6
lines changed Original file line number Diff line number Diff line change @@ -25,6 +25,7 @@ export interface SignInWithIdpRequest {
25
25
sessionId ?: string ;
26
26
tenantId ?: string ;
27
27
returnSecureToken : boolean ;
28
+ returnIdpCredential ?: boolean ;
28
29
idToken ?: IdToken ;
29
30
autoCreate ?: boolean ;
30
31
pendingToken ?: string ;
Original file line number Diff line number Diff line change @@ -120,6 +120,29 @@ describe('api/_performApiRequest', () => {
120
120
expect ( mock . calls [ 0 ] . request ) . to . eql ( request ) ;
121
121
} ) ;
122
122
123
+ it ( 'should translate server success with errorMessage into auth error' , async ( ) => {
124
+ const response = {
125
+ errorMessage : ServerError . FEDERATED_USER_ID_ALREADY_LINKED ,
126
+ idToken : 'foo-bar' ,
127
+ } ;
128
+ const mock = mockEndpoint (
129
+ Endpoint . SIGN_IN_WITH_IDP ,
130
+ response ,
131
+ 200
132
+ ) ;
133
+ const promise = _performApiRequest < typeof request , typeof serverResponse > (
134
+ auth ,
135
+ HttpMethod . POST ,
136
+ Endpoint . SIGN_IN_WITH_IDP ,
137
+ request
138
+ ) ;
139
+ await expect ( promise ) . to . be . rejectedWith (
140
+ FirebaseError ,
141
+ 'auth/credential-already-in-use'
142
+ ) . eventually . with . deep . property ( 'customData' , { appName : 'test-app' , _tokenResponse : response } ) ;
143
+ expect ( mock . calls [ 0 ] . request ) . to . eql ( request ) ;
144
+ } ) ;
145
+
123
146
it ( 'should translate complex server errors to auth errors' , async ( ) => {
124
147
const mock = mockEndpoint (
125
148
Endpoint . SIGN_UP ,
Original file line number Diff line number Diff line change @@ -132,10 +132,11 @@ export async function _performFetchWithErrorHandling<V>(
132
132
throw makeTaggedError ( auth , AuthErrorCode . NEED_CONFIRMATION , json ) ;
133
133
}
134
134
135
- if ( response . ok ) {
135
+ if ( response . ok && ! ( 'errorMessage' in json ) ) {
136
136
return json ;
137
137
} else {
138
- const serverErrorCode = json . error . message . split ( ' : ' ) [ 0 ] as ServerError ;
138
+ const errorMessage = response . ok ? json . errorMessage : json . error . message ;
139
+ const serverErrorCode = errorMessage . split ( ' : ' ) [ 0 ] as ServerError ;
139
140
if ( serverErrorCode === ServerError . FEDERATED_USER_ID_ALREADY_LINKED ) {
140
141
throw makeTaggedError (
141
142
auth ,
Original file line number Diff line number Diff line change @@ -82,7 +82,8 @@ describe('core/strategies/idb', () => {
82
82
postBody : 'post-body' ,
83
83
tenantId : 'tenant-id' ,
84
84
pendingToken : 'pending-token' ,
85
- returnSecureToken : true
85
+ returnSecureToken : true ,
86
+ returnIdpCredential : true ,
86
87
} ) ;
87
88
} ) ;
88
89
@@ -112,7 +113,7 @@ describe('core/strategies/idb', () => {
112
113
tenantId : 'tenant-id' ,
113
114
pendingToken : 'pending-token' ,
114
115
postBody : 'post-body' ,
115
- bypassAuthState : true
116
+ bypassAuthState : true ,
116
117
} ) ;
117
118
expect ( stub . getCall ( 0 ) . lastArg ) . to . be . true ;
118
119
} ) ;
@@ -136,7 +137,8 @@ describe('core/strategies/idb', () => {
136
137
postBody : 'post-body' ,
137
138
tenantId : 'tenant-id' ,
138
139
pendingToken : 'pending-token' ,
139
- returnSecureToken : true
140
+ returnSecureToken : true ,
141
+ returnIdpCredential : true ,
140
142
} ) ;
141
143
} ) ;
142
144
@@ -193,6 +195,7 @@ describe('core/strategies/idb', () => {
193
195
tenantId : 'tenant-id' ,
194
196
pendingToken : 'pending-token' ,
195
197
returnSecureToken : true ,
198
+ returnIdpCredential : true ,
196
199
idToken : idTokenBeforeLink
197
200
} ) ;
198
201
} ) ;
Original file line number Diff line number Diff line change @@ -71,7 +71,8 @@ class IdpCredential extends AuthCredential {
71
71
postBody : this . params . postBody || null ,
72
72
tenantId : this . params . tenantId ,
73
73
pendingToken : this . params . pendingToken ,
74
- returnSecureToken : true
74
+ returnSecureToken : true ,
75
+ returnIdpCredential : true ,
75
76
} ;
76
77
77
78
if ( idToken ) {
You can’t perform that action at this time.
0 commit comments