如何在不请求的情况下在firebase-auth中首次加载时获取currentUser

Posted

技术标签:

【中文标题】如何在不请求的情况下在firebase-auth中首次加载时获取currentUser【英文标题】:How to get currentUser on first load in firebase-auth without requesting 【发布时间】:2019-06-10 05:53:36 【问题描述】:

我正在使用 firebase 身份验证,我的导航栏取决于用户是否登录。当我加载网站时,如果用户之前没有注销,他应该仍然保持登录状态。但是,Firebase onAuthStateChanged 监听器在 100-300 毫秒后返回用户,所以我的导航栏无法确定用户是否登录。所以,导航栏显示登录和注册按钮 300 毫秒,然后 firebase 返回用户,导航栏显示仪表板和注销按钮。

我正在使用 vue,我尝试在本地存储中保存 UID 和用户名,但我担心安全性。如果有人手动更改本地存储数据怎么办?此外,用户可以注销,但保持登录状态,我手动设置 localStorage.setItem('user', ....)

Navbar.vue

<div v-if="user.uid" class="flex row space-b">
   // userpic, photo, logout button
</div>
<div v-else>
   // login and signup button 
</div>

vuex

state: 
user: 
  uid: null,
  photoURL: null,
  username: null,
,
,

我尝试在 onAuthStateChanged 侦听器返回某些内容之前不挂载 Vue 实例,但这不是一个好的解决方案,因此我将网站渲染延迟了近 300 毫秒。

【问题讨论】:

【参考方案1】:

无论如何,我把它保存在 cookie 中。当网站加载时,如果 cookie 存在,我会像用户登录一样呈现导航栏,然后在 firebase 侦听器返回后仔细检查

【讨论】:

效果不佳,现在我不会在导航栏上显示任何内容,直到侦听器返回 如果用户处于隐身模式怎么办,这不是解决方案。

以上是关于如何在不请求的情况下在firebase-auth中首次加载时获取currentUser的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重复的情况下在进程之间共享大量数据? (IPC)

如何在不通过 HTTP 加载图像的情况下在 HTML 中显示“重新加载”符号?

如何在不设置 lambda 的情况下在 apigateway http_proxy 上添加 CORS?

Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口

jquery 或 javascript 中有没有一种方法可以在不使用 ajax 请求的情况下在页面加载时填充下拉列表?

在不移动数据的情况下在 CUDA 中实现 realloc