Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit d5cdf14

Browse files
author
jpaagt
committed
Start listening to auth state changes for both android and iOS on init
1 parent 0af93e1 commit d5cdf14

File tree

2 files changed

+53
-34
lines changed

2 files changed

+53
-34
lines changed

firebase.android.js

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ firebase.getCallbackData = function(type, snapshot) {
8282
};
8383
};
8484

85+
firebase.authStateListener = null;
86+
8587
firebase.init = function (arg) {
8688
return new Promise(function (resolve, reject) {
8789
try {
@@ -95,6 +97,21 @@ firebase.init = function (arg) {
9597
// it is however still possible to pass the URL programmatically (which we'll do for now):
9698
// instance = fDatabase.getInstance().getReferenceFromUrl(arg.url);
9799

100+
// Listen to auth state changes
101+
if (!firebase.authStateListener) {
102+
firebase.authStateListener = new com.google.firebase.auth.FirebaseAuth.AuthStateListener({
103+
onAuthStateChanged: function (fbAuth) {
104+
var user = fbAuth.getCurrentUser();
105+
firebase.notifyAuthStateListeners({
106+
loggedIn: user !== null,
107+
user: toLoginResult(user)
108+
});
109+
}
110+
});
111+
var firebaseAuth = com.google.firebase.auth.FirebaseAuth.getInstance();
112+
firebaseAuth.addAuthStateListener(firebase.authStateListener);
113+
}
114+
98115
resolve(instance);
99116
} catch (ex) {
100117
console.log("Error in firebase.init: " + ex);
@@ -115,42 +132,29 @@ firebase.logout = function (arg) {
115132
});
116133
};
117134

118-
firebase.authStateListener = null;
135+
function toLoginResult(user) {
136+
return user && {
137+
uid: user.getUid(),
138+
name: user.getDisplayName(),
139+
email: user.getEmail(),
140+
// TODO add these properties, see https://firebase.google.com/docs/auth/android/manage-users#get_a_users_profile
141+
// provider: authData.getProvider(),
142+
// expiresAtUnixEpochSeconds: authData.getExpires(),
143+
profileImageURL: user.getPhotoUrl()
144+
};
145+
}
119146

120147
firebase.login = function (arg) {
121148
return new Promise(function (resolve, reject) {
122149
try {
123150
var firebaseAuth = com.google.firebase.auth.FirebaseAuth.getInstance();
124-
125-
if (firebase.authStateListener === null) {
126-
firebase.authStateListener = new com.google.firebase.auth.FirebaseAuth.AuthStateListener({
127-
onAuthStateChanged: function (fbAuth) {
128-
var user = fbAuth.getCurrentUser();
129-
firebase.notifyAuthStateListeners({
130-
loggedIn: user !== null,
131-
user: user
132-
});
133-
}
134-
});
135-
firebaseAuth.addAuthStateListener(firebase.authStateListener);
136-
}
137-
138151
var onCompleteListener = new com.google.android.gms.tasks.OnCompleteListener({
139152
onComplete: function (task) {
140153
if (!task.isSuccessful()) {
141154
reject("Logging in the user failed");
142155
} else {
143156
var user = task.getResult().getUser();
144-
resolve({
145-
uid: user.getUid(),
146-
name: user.getDisplayName(),
147-
email: user.getEmail(),
148-
// TODO add these properties, see https://firebase.google.com/docs/auth/android/manage-users#get_a_users_profile
149-
// provider: authData.getProvider(),
150-
// expiresAtUnixEpochSeconds: authData.getExpires(),
151-
profileImageURL: user.getPhotoUrl(),
152-
//token: user.getToken() // can be used to auth with a backend server
153-
});
157+
resolve(toLoginResult(user));
154158
}
155159
}
156160
});

firebase.ios.js

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ firebase.getCallbackData = function(type, snapshot) {
5252
};
5353
};
5454

55+
firebase.authStateListener = null;
56+
5557
firebase.init = function (arg) {
5658
return new Promise(function (resolve, reject) {
5759
try {
@@ -65,6 +67,17 @@ firebase.init = function (arg) {
6567

6668
instance = FIRDatabase.database().reference();
6769

70+
// Listen to auth state changes
71+
if (!firebase.authStateListener) {
72+
firebase.authStateListener = function(auth, user) {
73+
firebase.notifyAuthStateListeners({
74+
loggedIn: user !== null,
75+
user: toLoginResult(user)
76+
});
77+
};
78+
FIRAuth.auth().addAuthStateDidChangeListener(firebase.authStateListener);
79+
}
80+
6881
resolve(instance);
6982
} catch (ex) {
7083
console.log("Error in firebase.init: " + ex);
@@ -85,6 +98,16 @@ firebase.logout = function (arg) {
8598
});
8699
};
87100

101+
function toLoginResult(user) {
102+
return user && {
103+
uid: user.uid,
104+
provider: user.providerID,
105+
profileImageURL: user.photoURL,
106+
email: user.email,
107+
name: user.displayName
108+
};
109+
}
110+
88111
firebase.login = function (arg) {
89112
return new Promise(function (resolve, reject) {
90113
try {
@@ -96,15 +119,7 @@ firebase.login = function (arg) {
96119
console.log(JSON.stringify(user));
97120
console.log(firebase.toJsObject(user));
98121

99-
resolve({
100-
uid: user.uid,
101-
provider: user.providerID,
102-
profileImageURL: user.photoURL,
103-
email: user.email,
104-
name: user.displayName,
105-
// expiresAtUnixEpochSeconds: user.expires,
106-
//token: user.token
107-
});
122+
resolve(toLoginResult(user));
108123

109124
firebase.notifyAuthStateListeners({
110125
loggedIn: true,

0 commit comments

Comments
 (0)