Skip to content

Commit ee6980d

Browse files
authored
Add remaining bits to support Cordova redirect sign in (#4478)
* Add remaining cordova bits for redirect * Formatting
1 parent 1a90c06 commit ee6980d

File tree

5 files changed

+68
-30
lines changed

5 files changed

+68
-30
lines changed

packages-exp/auth-exp/index.cordova.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,14 @@ export * from './src';
3737
export { indexedDBLocalPersistence } from './src/platform_browser/persistence/indexed_db';
3838
export { browserLocalPersistence } from './src/platform_browser/persistence/local_storage';
3939
export { browserSessionPersistence } from './src/platform_browser/persistence/session_storage';
40+
export { getRedirectResult } from './src/platform_browser/strategies/redirect';
4041

4142
export { cordovaPopupRedirectResolver } from './src/platform_cordova/popup_redirect/popup_redirect';
42-
export { signInWithRedirect } from './src/platform_cordova/strategies/redirect';
43+
export {
44+
signInWithRedirect,
45+
reauthenticateWithRedirect,
46+
linkWithRedirect
47+
} from './src/platform_cordova/strategies/redirect';
4348

4449
import { cordovaPopupRedirectResolver } from './src/platform_cordova/popup_redirect/popup_redirect';
4550

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export interface PopupRedirectResolver extends externs.PopupRedirectResolver {
8686
provider: externs.AuthProvider,
8787
authType: AuthEventType,
8888
eventId?: string
89-
): Promise<unknown>;
89+
): Promise<void | never>;
9090
_isIframeWebStorageSupported(
9191
auth: Auth,
9292
cb: (support: boolean) => unknown

packages-exp/auth-exp/src/platform_browser/strategies/redirect.ts

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,18 @@ import { RedirectAction } from '../../core/strategies/redirect';
6767
*
6868
* @public
6969
*/
70-
export async function signInWithRedirect(
70+
export function signInWithRedirect(
7171
auth: externs.Auth,
7272
provider: externs.AuthProvider,
7373
resolver?: externs.PopupRedirectResolver
7474
): Promise<never> {
75+
return _signInWithRedirect(auth, provider, resolver) as Promise<never>;
76+
}
77+
export async function _signInWithRedirect(
78+
auth: externs.Auth,
79+
provider: externs.AuthProvider,
80+
resolver?: externs.PopupRedirectResolver
81+
): Promise<void | never> {
7582
const authInternal = _castAuth(auth);
7683
_assert(
7784
provider instanceof OAuthProvider,
@@ -83,7 +90,7 @@ export async function signInWithRedirect(
8390
authInternal,
8491
provider,
8592
AuthEventType.SIGN_IN_VIA_REDIRECT
86-
) as Promise<never>;
93+
);
8794
}
8895

8996
/**
@@ -114,11 +121,22 @@ export async function signInWithRedirect(
114121
*
115122
* @public
116123
*/
117-
export async function reauthenticateWithRedirect(
124+
export function reauthenticateWithRedirect(
118125
user: externs.User,
119126
provider: externs.AuthProvider,
120127
resolver?: externs.PopupRedirectResolver
121128
): Promise<never> {
129+
return _reauthenticateWithRedirect(
130+
user,
131+
provider,
132+
resolver
133+
) as Promise<never>;
134+
}
135+
export async function _reauthenticateWithRedirect(
136+
user: externs.User,
137+
provider: externs.AuthProvider,
138+
resolver?: externs.PopupRedirectResolver
139+
): Promise<void | never> {
122140
const userInternal = user as User;
123141
_assert(
124142
provider instanceof OAuthProvider,
@@ -135,7 +153,7 @@ export async function reauthenticateWithRedirect(
135153
provider,
136154
AuthEventType.REAUTH_VIA_REDIRECT,
137155
eventId
138-
) as Promise<never>;
156+
);
139157
}
140158

141159
/**
@@ -163,11 +181,18 @@ export async function reauthenticateWithRedirect(
163181
*
164182
* @public
165183
*/
166-
export async function linkWithRedirect(
184+
export function linkWithRedirect(
167185
user: externs.User,
168186
provider: externs.AuthProvider,
169187
resolver?: externs.PopupRedirectResolver
170188
): Promise<never> {
189+
return _linkWithRedirect(user, provider, resolver) as Promise<never>;
190+
}
191+
export async function _linkWithRedirect(
192+
user: externs.User,
193+
provider: externs.AuthProvider,
194+
resolver?: externs.PopupRedirectResolver
195+
): Promise<void | never> {
171196
const userInternal = user as User;
172197
_assert(
173198
provider instanceof OAuthProvider,
@@ -185,7 +210,7 @@ export async function linkWithRedirect(
185210
provider,
186211
AuthEventType.LINK_VIA_REDIRECT,
187212
eventId
188-
) as Promise<never>;
213+
);
189214
}
190215

191216
/**

packages-exp/auth-exp/src/platform_cordova/popup_redirect/popup_redirect.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ import {
4141
_savePartialEvent
4242
} from './events';
4343
import { AuthEventManager } from '../../core/auth/auth_event_manager';
44+
import { _getRedirectResult } from '../../platform_browser/strategies/redirect';
45+
import { _clearRedirectOutcomes } from '../../core/strategies/redirect';
4446

4547
/**
4648
* How long to wait for the initial auth event before concluding no
@@ -52,7 +54,7 @@ class CordovaPopupRedirectResolver implements PopupRedirectResolver {
5254
readonly _redirectPersistence = browserSessionPersistence;
5355
private readonly eventManagers = new Map<string, CordovaAuthEventManager>();
5456

55-
_completeRedirectFn = async (): Promise<null> => null;
57+
_completeRedirectFn = _getRedirectResult;
5658

5759
async _initialize(auth: Auth): Promise<CordovaAuthEventManager> {
5860
const key = auth._key();
@@ -78,7 +80,12 @@ class CordovaPopupRedirectResolver implements PopupRedirectResolver {
7880
_checkCordovaConfiguration(auth);
7981
const manager = await this._initialize(auth);
8082
await manager.initialized();
83+
84+
// Reset the persisted redirect states. This does not matter on Web where
85+
// the redirect always blows away application state entirely. On Cordova,
86+
// the app maintains control flow through the redirect.
8187
manager.resetRedirect();
88+
_clearRedirectOutcomes();
8289

8390
const event = _generateNewEvent(auth, authType, eventId);
8491
await _savePartialEvent(auth, event);

packages-exp/auth-exp/src/platform_cordova/strategies/redirect.ts

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,32 @@
1616
*/
1717

1818
import * as externs from '@firebase/auth-types-exp';
19-
import { _castAuth } from '../../core/auth/auth_impl';
20-
import { AuthErrorCode } from '../../core/errors';
21-
import { OAuthProvider } from '../../core/providers/oauth';
22-
import { _assert } from '../../core/util/assert';
23-
import { _withDefaultResolver } from '../../core/util/resolver';
24-
import { AuthEventType } from '../../model/popup_redirect';
19+
import {
20+
_linkWithRedirect,
21+
_reauthenticateWithRedirect,
22+
_signInWithRedirect
23+
} from '../../platform_browser/strategies/redirect';
2524

26-
// TODO: For now this code is largely a duplicate of platform_browser/strategies/redirect.
27-
// It's likely we can just reuse that code
28-
29-
export async function signInWithRedirect(
25+
export function signInWithRedirect(
3026
auth: externs.Auth,
3127
provider: externs.AuthProvider,
3228
resolver?: externs.PopupRedirectResolver
3329
): Promise<void> {
34-
const authInternal = _castAuth(auth);
35-
_assert(
36-
provider instanceof OAuthProvider,
37-
auth,
38-
AuthErrorCode.ARGUMENT_ERROR
39-
);
30+
return _signInWithRedirect(auth, provider, resolver) as Promise<void>;
31+
}
32+
33+
export function reauthenticateWithRedirect(
34+
user: externs.User,
35+
provider: externs.AuthProvider,
36+
resolver?: externs.PopupRedirectResolver
37+
): Promise<void> {
38+
return _reauthenticateWithRedirect(user, provider, resolver) as Promise<void>;
39+
}
4040

41-
return _withDefaultResolver(authInternal, resolver)._openRedirect(
42-
authInternal,
43-
provider,
44-
AuthEventType.SIGN_IN_VIA_REDIRECT
45-
) as Promise<void>;
41+
export function linkWithRedirect(
42+
user: externs.User,
43+
provider: externs.AuthProvider,
44+
resolver?: externs.PopupRedirectResolver
45+
): Promise<void> {
46+
return _linkWithRedirect(user, provider, resolver) as Promise<void>;
4647
}

0 commit comments

Comments
 (0)