Skip to content

Commit 5925c7e

Browse files
committed
Fix oauth credential and test for OIDC
1 parent 6a86a1b commit 5925c7e

File tree

5 files changed

+36
-10
lines changed

5 files changed

+36
-10
lines changed

packages-exp/auth-exp/src/core/providers/oauth.test.ts

+20
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,26 @@ describe('core/providers/oauth', () => {
7878
expect(OAuthProvider.credentialFromResult(userCred)).to.be.null;
7979
});
8080

81+
it('credentialFromResult works for oidc', async () => {
82+
const auth = await testAuth();
83+
const userCred = new UserCredentialImpl({
84+
user: testUser(auth, 'uid'),
85+
providerId: ProviderId.GOOGLE,
86+
_tokenResponse: {
87+
...TEST_ID_TOKEN_RESPONSE,
88+
pendingToken: 'pending-token',
89+
oauthIdToken: 'id-token',
90+
providerId: 'oidc.oidctest',
91+
},
92+
operationType: OperationType.SIGN_IN
93+
});
94+
const cred = OAuthProvider.credentialFromResult(userCred)!;
95+
expect(cred.idToken).to.eq('id-token');
96+
expect(cred.providerId).to.eq('oidc.oidctest');
97+
expect(cred.signInMethod).to.eq('oidc.oidctest');
98+
expect((cred.toJSON() as Record<string, string>).pendingToken).to.eq('pending-token');
99+
});
100+
81101
it('credentialFromError creates the cred from a tagged error', () => {
82102
const error = _createError(AuthErrorCode.NEED_CONFIRMATION, {
83103
appName: 'foo'

packages-exp/auth-exp/src/core/providers/oauth.ts

+11-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import * as externs from '@firebase/auth-types-exp';
2020
import { _assert } from '../util/assert';
2121
import { AuthErrorCode } from '../errors';
2222

23-
import { OAuthCredential } from '../credentials/oauth';
23+
import { OAuthCredential, OAuthCredentialParams } from '../credentials/oauth';
2424
import { UserCredential } from '../../model/user';
2525
import { FirebaseError } from '@firebase/util';
2626
import { TaggedWithTokenResponse } from '../../model/id_token';
@@ -146,12 +146,17 @@ export class OAuthProvider implements externs.AuthProvider {
146146
* or the ID token string.
147147
*/
148148
credential(params: OAuthCredentialOptions): externs.OAuthCredential {
149-
_assert(params.idToken && params.accessToken, AuthErrorCode.ARGUMENT_ERROR);
149+
return this._credential(params);
150+
}
151+
152+
/** An internal credential method that accepts more permissive options */
153+
private _credential(params: OAuthCredentialOptions | OAuthCredentialParams): externs.OAuthCredential {
154+
_assert(params.idToken || params.accessToken, AuthErrorCode.ARGUMENT_ERROR);
150155
// For OAuthCredential, sign in method is same as providerId.
151156
return OAuthCredential._fromParams({
157+
...params,
152158
providerId: this.providerId,
153159
signInMethod: this.providerId,
154-
...params
155160
});
156161
}
157162

@@ -265,10 +270,11 @@ export class OAuthProvider implements externs.AuthProvider {
265270
}
266271

267272
try {
268-
return new OAuthProvider(providerId).credential({
273+
return new OAuthProvider(providerId)._credential({
269274
idToken: oauthIdToken,
270275
accessToken: oauthAccessToken,
271-
rawNonce: nonce
276+
rawNonce: nonce,
277+
pendingToken,
272278
});
273279
} catch (e) {
274280
return null;

packages-exp/auth-exp/src/core/user/additional_user_info.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export function _fromIdTokenResponse(
7878
class GenericAdditionalUserInfo implements externs.AdditionalUserInfo {
7979
constructor(
8080
readonly isNewUser: boolean,
81-
readonly providerId: externs.ProviderId | null,
81+
readonly providerId: externs.ProviderId | string | null,
8282
readonly profile: Record<string, unknown> = {}
8383
) {}
8484
}

packages-exp/auth-exp/src/core/user/user_credential_impl.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ import { Auth } from '../../model/auth';
2525

2626
interface UserCredentialParams {
2727
readonly user: User;
28-
readonly providerId: externs.ProviderId | null;
28+
readonly providerId: externs.ProviderId | string | null;
2929
readonly _tokenResponse?: PhoneOrOauthTokenResponse;
3030
readonly operationType: externs.OperationType;
3131
}
3232

3333
export class UserCredentialImpl
3434
implements UserCredential, UserCredentialParams {
3535
readonly user: User;
36-
readonly providerId: externs.ProviderId | null;
36+
readonly providerId: externs.ProviderId | string | null;
3737
readonly _tokenResponse: PhoneOrOauthTokenResponse | undefined;
3838
readonly operationType: externs.OperationType;
3939

@@ -83,7 +83,7 @@ export class UserCredentialImpl
8383

8484
function providerIdForResponse(
8585
response: IdTokenResponse
86-
): externs.ProviderId | null {
86+
): externs.ProviderId | string | null {
8787
if (response.providerId) {
8888
return response.providerId;
8989
}

packages-exp/auth-exp/src/model/id_token.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export interface IdTokenResponse {
5555
idToken?: IdToken;
5656
refreshToken?: string;
5757
expiresIn?: string;
58-
providerId?: ProviderId;
58+
providerId?: ProviderId|string;
5959

6060
// Used in AdditionalUserInfo
6161
displayName?: string | null;

0 commit comments

Comments
 (0)