Firebase retrieve the user data stored in local st

2019-02-13 09:47发布

问题:

I am working with Firebase and AngularJS. I am using Auth authentication for google login and i completed the process.Now i need to retrieve the user data that is stored in local storage like firebase:authUser:.

Once i login with google account in local storage you have firebase:authUser:.created and i need to fetch these details.

I used the following method to store user data

firebase.database().ref('users/' + user.uid).set
({
     name: user.displayName,
     email: user.email,
     token: token
});

回答1:

Just to augment @Franciso Mateo's answer: the mentioned filtering, just returns the key (string) with which the serialized user object is stored in local storage. To get the actual deserialized user object, we need to read the item with this key from local storage:

const userKey = Object.keys(window.localStorage)
  .filter(it => it.startsWith('firebase:authUser'))[0];
const user = userKey ? JSON.parse(localStorage.getItem(userKey)) : undefined;


回答2:

The documentation for the Web SDK does not mention that upon successfully authentication, Firebase sets the User object in localStorage. The API reference does not mention this either. I discovered this the same way you have by examining localStorage while trying to configure my Vue app with Firebase.

To retrieve the user from localStorage, you can do the following:

const authUser = Object.keys(window.localStorage)
  .filter(item => item.startsWith('firebase:authUser'))[0]

You could have multiple entries in localStorage so that's the reason for filter()

Edit: See Metallica's answer below.


Update (2018-02-21): It seems there is now a section (Web) Authentication State Persistence . Unsure if this was there when I originally posted my answer, but I'm updating this answer to link it since this questions gets moderate attention.

Update 2 (2018-02-21): As stated under Overview of persistence behavior :

If no user is signed in and no persistence is specified, the default setting will be applied (local in a browser app).

So localStorage is the default which confirms my original answer before the Firebase JS SDK was open sourced.



回答3:

To get a user's profile information, use the properties of an instance of User. For example:

var user = firebase.auth().currentUser;
var name, email, photoURL, uid;

    if(user != null) {
       name = user.displayName;
       email = user.email;
       photoUrl = user.photoURL;
       uid = user.uid;
    }

If you'd like to learn more about how to manage users in Firebase using Web SDK, visit this documentation.