Firebase将存储在本地存储中的用户数据检索为firebase:authUser:

Abr*_*ham 7 javascript angularjs firebase ionic-framework firebase-authentication

我正在使用Firebase和AngularJS.我正在使用Auth身份验证进行谷歌登录,我完成了流程.现在我需要检索存储在本地存储中的用户数据,如firebase:authUser:.

一旦我在本地存储中使用谷歌帐户登录,你就有了firebase:authUser:.create,我需要获取这些详细信息.

我使用以下方法来存储用户数据

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

Fra*_*teo 7

Web SDK的文档未提及成功进行身份验证后,Firebase会在localStorage中设置User对象.API参考也没有提到这一点.在尝试使用Firebase配置我的Vue应用程序时,我通过检查localStorage以相同的方式发现了这一点.

要从localStorage检索用户,您可以执行以下操作:

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

你可以有多个条目,localStorage这就是原因filter()

编辑:请参阅下面的Metallica的答案.


更新(2018-02-21):现在似乎有一个部分(Web)身份验证状态持久性 .当我最初发布我的答案时,不确定这是否存在,但是我正在更新此答案以链接它,因为这些问题得到了适度的关注.

更新2(2018-02-21):如持久性行为概述中 所述:

如果没有用户登录且未指定持久性,则将应用默认设置(local在浏览器应用程序中).

所以localStorage是这证实了我原来的答复默认之前的火力地堡JS SDK是开源.


Jav*_*deh 6

只是为了增加@Franciso Mateo的答案:提到的过滤,只返回序列化用户对象存储在本地存储中的密钥(字符串).要获取实际的反序列化用户对象,我们需要使用本地存储中的此键读取该项:

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

  • 请注意,最近已更改为使用indexedDB:https://groups.google.com/forum/#!topic/firebase-talk/wgSvjniKPQI (2认同)

loo*_*p88 1

要获取用户的配置文件信息,请使用 User 实例的属性。例如:

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;
    }
Run Code Online (Sandbox Code Playgroud)

如果您想详细了解如何使用 Web SDK 在 Firebase 中管理用户,请访问此文档

  • 我已经尝试过这个,但它为 currentUser 返回 null。但我发现数据存储在本地存储中,与密钥 **firebase:authUser: _val_** 有关更多说明 **请注意,我使用 gmail 身份验证并保存之后收到的值 ** (2认同)