Skip to content

Commit

Permalink
fix(auth): correctly emit anonymous auth state
Browse files Browse the repository at this point in the history
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 #229
  • Loading branch information
jeffbcross committed Jun 21, 2016
1 parent 002d9ed commit 51c8caa
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 7 deletions.
10 changes: 8 additions & 2 deletions src/providers/auth.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,12 @@ const firebaseUser = <firebase.User> {
}]
};

const anonymouseFirebaseUser = <firebase.User> {
uid: '12345',
isAnonymous: true,
providerData: []
}

const githubCredential = {
credential: {
accessToken: 'ACCESS_TOKEN',
Expand Down Expand Up @@ -114,7 +120,7 @@ describe('FirebaseAuth', () => {
authSpy['signInWithPopup'].and.returnValue(Promise.resolve(googleCredential));
authSpy['signInWithRedirect'].and.returnValue(Promise.resolve(AngularFireAuthState));
authSpy['signInWithCredential'].and.returnValue(Promise.resolve(firebaseUser));
authSpy['signInAnonymously'].and.returnValue(Promise.resolve(firebaseUser));
authSpy['signInAnonymously'].and.returnValue(Promise.resolve(anonymouseFirebaseUser));
authSpy['signInWithCustomToken'].and.returnValue(Promise.resolve(firebaseUser));
authSpy['signInWithEmailAndPassword'].and.returnValue(Promise.resolve(firebaseUser));
authSpy['onAuthStateChanged']
Expand Down Expand Up @@ -333,7 +339,7 @@ describe('FirebaseAuth', () => {
it('will resolve the promise upon authentication', (done: any) => {
afAuth.login(options)
.then(result => {
expect(result.auth).toEqual(AngularFireAuthState.auth);
expect(result.auth).toEqual(anonymouseFirebaseUser);
})
.then(done, done.fail);

Expand Down
21 changes: 21 additions & 0 deletions src/providers/auth_backend.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ const baseFBUser = {
providerData: [{}]
};

const anonymouseFirebaseUser = <firebase.User> {
uid: 'fCjhqFLSmLRI1YOfFwy7MDmjBpC9',
isAnonymous: true,
providerData: []
};

const baseAuthState: FirebaseAuthState = {
uid: baseFBUser.uid,
provider: AuthProviders.Anonymous,
Expand Down Expand Up @@ -103,4 +109,19 @@ describe('auth_backend', () => {
let actualAuthState = authDataToAuthState(facebookUser, baseFacebookCredential);
expect(actualAuthState.facebook.accessToken).toEqual(baseFacebookCredential.accessToken);
});


it('Anonymous: should return a FirebaseAuthState object', () => {
let anonymouseFirebaseUser = Object.assign({}, baseFBUser, {
providerData: [],
isAnonymous: true
});
let expectedAuthState = Object.assign({}, baseAuthState, {
facebook: baseFacebookCredential,
auth: anonymouseFirebaseUser
});

let actualAuthState = authDataToAuthState(anonymouseFirebaseUser);
expect(actualAuthState.anonymous).toEqual(true);
});
});
16 changes: 12 additions & 4 deletions src/providers/auth_backend.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ export interface FirebaseAuthState {
google?: GoogleCredential;
twitter?: TwitterCredential;
facebook?: CommonOAuthCredential;
anonymous?: boolean;
}

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

export function authDataToAuthState(authData: firebase.User, providerData?: OAuthCredential): FirebaseAuthState {
let { uid, providerData: [{providerId}] } = authData;
let providerId;
let { uid } = authData;
let authState: FirebaseAuthState = { auth: authData, uid, provider: null };
if (authData.isAnonymous) {
providerId = 'anonymous';
authState.provider = AuthProviders.Anonymous;
authState.anonymous = true;
return authState;
} else {
providerId = authData.providerData[0].providerId;
}

switch (providerId) {
case 'github.com':
authState.github = <CommonOAuthCredential>providerData;
Expand All @@ -91,9 +102,6 @@ export function authDataToAuthState(authData: firebase.User, providerData?: OAut
case 'password':
authState.provider = AuthProviders.Password;
break;
case 'anonymous':
authState.provider = AuthProviders.Anonymous;
break;
case 'custom':
authState.provider = AuthProviders.Custom;
break;
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/auth/firebase_auth_example.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { COMMON_CONFIG } from '../../../src/test-config';
<p>
Is Anonymous?
<span id="is-anonymous">
{{ user?.isAnonymous }}
{{ user?.anonymous }}
</span>
</p>
</blockquote>
Expand Down

0 comments on commit 51c8caa

Please sign in to comment.