热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript–有时firebase.auth().onAuthStateChanged在刷新页面时返回null用户

前提$npminstall–savefirebase@4.11.0问题我在我的Web应用程序上使用firebase身份验证.在我的应用

前提

$npm install –save firebase@4.11.0

问题

我在我的Web应用程序上使用firebase身份验证.
在我的应用程序中,我为客户端js实现了onAuthStateChanged,如下所示.

firebase.auth().onAuthStateChanged((user) => {
if(user) {
//logged in
} else {
//do sth
}
});

登录后,我确认此方法将返回实际用户obj,但如果我刷新页面,则用户可能为null.
奇怪的是,有时用户不会为空.
我担心调用onAuthStateChanged有一些限制,但目前我不知道.

我该如何处理这个问题?

更新

让我分享一下我的最小例子.

我的应用正在使用express.js.
有两个网址,如下所示.
/登录
/主要

在登录页面中,我实现了身份验证方法.
如果登录成功完成,则用户将被重定向到“/ main”.

//login.js
import firebase from 'firebase';
var cOnfig= {...};
firebase.initializeApp(config);
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider)
.then((result) => {
return result.user.getIdToken(true);
}).then((idToken) => {
if(idToken) {
location.href = '/main';
}
});

在主页面中,没有登录方法.
main.js仅检查用户是否已登录.

//main.js
import firebase from 'firebase';
var cOnfig= {...};
firebase.initializeApp(config);
firebase.auth().onAuthStateChanged((user) => {
if (user) {
//initialize main page.
} else {
location.href = '/login';
}
}

我认为登录状态存储在Web浏览器的LocalStorage上.
这意味着,在完成main.js的加载后,onAuthStateChanged将自动触发用户信息,但不能按预期工作.
我确信登录信息的持久性是正确的,因为官方文档说默认设置是针对Web客户端的LOCAL.

https://firebase.google.com/docs/auth/web/auth-state-persistence

我的问题

我应该用另一种方式实现onAuthStateChanged吗?
如何确保用户在重新加载后登录?

例如

import $from 'jquery';
$(document).on('ready', () => {
onAuthStateChanged((user) => {...});
});

或者你能告诉我正确的方法吗?

解决方法

如果返回null,我决定删除会话并将重定向设置为登录页面.这不是解决方案,而是目前的解决方法……

解决方法:

你没有调用onAuthStateChanged.相反,你告诉Firebase在身份验证状态发生变化时给你打电话,这可能会在重新加载页面时发生几次

当页面被加载并且之前有用户登录时,身份验证状态可能会改变几次,而客户端正在确定用户的身份验证状态是否仍然有效.因此,在看到与实际登录用户的最终通话之前,您可能会看到没有用户的通话.


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 我正在尝试将Firebase添加到涉及添加以下内容的现有应用程序中:classpath'com.googl ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • 我创建了一个新的AWSSSO(使用内部IDP作为身份源,因此不使用ActiveDirectory)。我能够登录AWSCLI、AWSGUI,但 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • 【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
    【CTF 攻略】第三届 SSCTF 全国网络安全大赛—线上赛 Writeup ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • oracle恢复失败,RMAN数据库恢复失败解决一例
    问题:这是一个从RAC环境的数据库的RAMN备份恢复到一个单机数据库的操作。当恢复数据文件和恢复正常,但在open数据库时出报下面的错误。--rman备 ... [详细]
author-avatar
YANLIUPING
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有