【发布时间】:2016-06-22 11:54:11
【问题描述】:
目标:学习在 Firebase 中制作聊天应用程序。参考来源
状态:基本聊天功能已完成。使用谷歌提供商登录并在聊天时使用相应的用户名。 有效,除了给定的问题情况。
编辑 1:下面提到的所有问题都可以在最后给出的最小、完整和可验证的示例链接中进行验证。聊天代码取自 firebase 文档 - https://www.firebase.com/tutorial/#session/iq2koybqhgq,需要对 google 登录进行修改。
问题 1:使用unAuth() 注销。这会终止会话(通过进入 Chrome 浏览器中的资源本地存储进行检查。)
但即使在注销后并继续聊天,它也会将数据(带有用户名的文本消息)推送到 Firebase 存储中。
关注和思考:在下面给出的代码中,注销后,控制台出现“客户端未经身份验证”消息,这是预期的行为。 authData 的值也应为 null,因此不应执行相应的 if 块。但在这种情况下它是!
问题 2:注销后并再次登录我得到了推送数据的两个实例以及相同数量的空白文本使用用户名。
例如,如果用户名是 XYZ,短信是“Hi”,经过上述过程,在聊天框中会出现两个“Hi”和 XYZ 的实例(有时是任何其他登录的用户名)还有两个带有空文本消息的 XYZ 实例。
关注和想法:我认为是它的多次登录导致了这个问题。这也可能是由于数据的存储方式(异步)。
代码:
userRef.onAuth(function(authData) {
if (authData) {
//code to push the username and corresponding text message into firebase
} else {
console.log("Client unauthenticated.");
}
});
我检查了堆栈上的许多其他问题,但我认为这些错误是我的代码特有的。如果需要任何进一步的信息,请询问。
编辑 2:https://jsfiddle.net/91swbfd7/5/ - 问题 1 已通过一些调整得到解决。仍然无法解决问题2。
【问题讨论】:
-
您所描述的大多数行为确实表明您在处理登录时存在错误。但是如果没有看到minimal, complete that reproduces the behavior,就无法说更多。一个好方法可能是在 jsfiddle/jsbin 中重现问题,然后编辑您的问题以包含相关代码。
-
@FrankvanPuffelen 是的,这是个好主意。我会这样做的!
-
@FrankvanPuffelen 我创建了一个 jsfiddle 供参考。您会建议 AngularFire 作为替代解决方案吗?请看一下上面编辑中提到的小提琴。
标签: firebase firebase-authentication