File tree 5 files changed +32
-5
lines changed
packages-exp/auth-exp/src
5 files changed +32
-5
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,27 @@ 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 ( Endpoint . SIGN_IN_WITH_IDP , response , 200 ) ;
129
+ const promise = _performApiRequest < typeof request , typeof serverResponse > (
130
+ auth ,
131
+ HttpMethod . POST ,
132
+ Endpoint . SIGN_IN_WITH_IDP ,
133
+ request
134
+ ) ;
135
+ await expect ( promise )
136
+ . to . be . rejectedWith ( FirebaseError , 'auth/credential-already-in-use' )
137
+ . eventually . with . deep . property ( 'customData' , {
138
+ appName : 'test-app' ,
139
+ _tokenResponse : response
140
+ } ) ;
141
+ expect ( mock . calls [ 0 ] . request ) . to . eql ( request ) ;
142
+ } ) ;
143
+
123
144
it ( 'should translate complex server errors to auth errors' , async ( ) => {
124
145
const mock = mockEndpoint (
125
146
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
@@ -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