Skip to content

Commit 51c8caa

Browse files
committed
fix(auth): correctly emit anonymous auth state
A new boolean property has been added to FirebaseAuthState, `anonymous`. This will be set to true when the authenticated user is authenticated via anonymous authentication. Part of angular#229
1 parent 002d9ed commit 51c8caa

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

src/providers/auth.spec.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ const firebaseUser = <firebase.User> {
6363
}]
6464
};
6565

66+
const anonymouseFirebaseUser = <firebase.User> {
67+
uid: '12345',
68+
isAnonymous: true,
69+
providerData: []
70+
}
71+
6672
const githubCredential = {
6773
credential: {
6874
accessToken: 'ACCESS_TOKEN',
@@ -114,7 +120,7 @@ describe('FirebaseAuth', () => {
114120
authSpy['signInWithPopup'].and.returnValue(Promise.resolve(googleCredential));
115121
authSpy['signInWithRedirect'].and.returnValue(Promise.resolve(AngularFireAuthState));
116122
authSpy['signInWithCredential'].and.returnValue(Promise.resolve(firebaseUser));
117-
authSpy['signInAnonymously'].and.returnValue(Promise.resolve(firebaseUser));
123+
authSpy['signInAnonymously'].and.returnValue(Promise.resolve(anonymouseFirebaseUser));
118124
authSpy['signInWithCustomToken'].and.returnValue(Promise.resolve(firebaseUser));
119125
authSpy['signInWithEmailAndPassword'].and.returnValue(Promise.resolve(firebaseUser));
120126
authSpy['onAuthStateChanged']
@@ -333,7 +339,7 @@ describe('FirebaseAuth', () => {
333339
it('will resolve the promise upon authentication', (done: any) => {
334340
afAuth.login(options)
335341
.then(result => {
336-
expect(result.auth).toEqual(AngularFireAuthState.auth);
342+
expect(result.auth).toEqual(anonymouseFirebaseUser);
337343
})
338344
.then(done, done.fail);
339345

src/providers/auth_backend.spec.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ const baseFBUser = {
2222
providerData: [{}]
2323
};
2424

25+
const anonymouseFirebaseUser = <firebase.User> {
26+
uid: 'fCjhqFLSmLRI1YOfFwy7MDmjBpC9',
27+
isAnonymous: true,
28+
providerData: []
29+
};
30+
2531
const baseAuthState: FirebaseAuthState = {
2632
uid: baseFBUser.uid,
2733
provider: AuthProviders.Anonymous,
@@ -103,4 +109,19 @@ describe('auth_backend', () => {
103109
let actualAuthState = authDataToAuthState(facebookUser, baseFacebookCredential);
104110
expect(actualAuthState.facebook.accessToken).toEqual(baseFacebookCredential.accessToken);
105111
});
112+
113+
114+
it('Anonymous: should return a FirebaseAuthState object', () => {
115+
let anonymouseFirebaseUser = Object.assign({}, baseFBUser, {
116+
providerData: [],
117+
isAnonymous: true
118+
});
119+
let expectedAuthState = Object.assign({}, baseAuthState, {
120+
facebook: baseFacebookCredential,
121+
auth: anonymouseFirebaseUser
122+
});
123+
124+
let actualAuthState = authDataToAuthState(anonymouseFirebaseUser);
125+
expect(actualAuthState.anonymous).toEqual(true);
126+
});
106127
});

src/providers/auth_backend.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export interface FirebaseAuthState {
5050
google?: GoogleCredential;
5151
twitter?: TwitterCredential;
5252
facebook?: CommonOAuthCredential;
53+
anonymous?: boolean;
5354
}
5455

5556
export interface CommonOAuthCredential {
@@ -69,8 +70,18 @@ export interface TwitterCredential extends CommonOAuthCredential {
6970
export type OAuthCredential = CommonOAuthCredential | GoogleCredential | TwitterCredential;
7071

7172
export function authDataToAuthState(authData: firebase.User, providerData?: OAuthCredential): FirebaseAuthState {
72-
let { uid, providerData: [{providerId}] } = authData;
73+
let providerId;
74+
let { uid } = authData;
7375
let authState: FirebaseAuthState = { auth: authData, uid, provider: null };
76+
if (authData.isAnonymous) {
77+
providerId = 'anonymous';
78+
authState.provider = AuthProviders.Anonymous;
79+
authState.anonymous = true;
80+
return authState;
81+
} else {
82+
providerId = authData.providerData[0].providerId;
83+
}
84+
7485
switch (providerId) {
7586
case 'github.com':
7687
authState.github = <CommonOAuthCredential>providerData;
@@ -91,9 +102,6 @@ export function authDataToAuthState(authData: firebase.User, providerData?: OAut
91102
case 'password':
92103
authState.provider = AuthProviders.Password;
93104
break;
94-
case 'anonymous':
95-
authState.provider = AuthProviders.Anonymous;
96-
break;
97105
case 'custom':
98106
authState.provider = AuthProviders.Custom;
99107
break;

test/e2e/auth/firebase_auth_example.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { COMMON_CONFIG } from '../../../src/test-config';
2525
<p>
2626
Is Anonymous?
2727
<span id="is-anonymous">
28-
{{ user?.isAnonymous }}
28+
{{ user?.anonymous }}
2929
</span>
3030
</p>
3131
</blockquote>

0 commit comments

Comments
 (0)