Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // https://stackoverflow.com/questions/21321234/how-to-prevent-simultaneous-logins-of-the-same-user-with-firebase
- const getUserRef = userId => firebase.database().ref(`/users/${userId}`);
- const ensureUserSession = userId => {
- const userRef = getUserRef(userId);
- return userRef.once(βvalueβ).then(snapshot => {
- if (!snapshot.exists()) {
- return userRef.set({
- last_seen: firebase.database.ServerValue.TIMESTAMP
- });
- }
- const user = snapshot.val();
- if (user.is_online) {
- throw new SessionAlreadyExists(...);
- }
- return Promise.resolve();
- });
- };
- firebase.auth().onAuthStateChanged(user => {
- if (user) {
- return ensureUserSession(user.uid)
- .then(() =>Β {
- const userRef = getUserRef(user.uid);
- return userRef
- .onDisconnect()
- .set({
- is_online: false,
- last_seen: firebase.database.ServerValue.TIMESTAMP
- }).then(() =>
- userRef.set({
- is_online: true,
- last_seen: firebase.database.ServerValue.TIMESTAMP
- });
- );
- }).catch(err => {
- console.error(err);
- if (err instanceof SessionAlreadyExists) {
- return firebase.auth().signOut();
- }
- });
- }
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement