检查 Firebase 实时数据库中是否已存在用户

2024-03-21

我得到了亚历克斯·马莫的解决方案 https://stackoverflow.com/a/47893879/4176989为了检查我的数据库中是否存在唯一值,但快照始终为空。解决方案在这里:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userNameRef = rootRef.child("Users").child("Nick123");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if(!dataSnapshot.exists()) {
        //create new user
    }
}

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
userNameRef.addListenerForSingleValueEvent(eventListener);

我的数据库如下所示:

users
    (auto-generated push token ID)
        fullname
        username
        gender
        ...

我不知道这是否是正确的方法,但我使用了 push() 方法将用户对象添加到数据库中,并且此方法会生成如上所述的推送令牌 ID。

那么,为了不创建重复的用户,我应该对上述解决方案进行哪些更改?有更好的方法来做到这一点吗?也许就像使用一些 firebase auth 方法检查 firebase uid 一样?

UPDATE My database screenshot: database As you see the string just below 'users' is not the same as user's uid.


将用户详细信息保存到数据库时,这不是最佳实践。首先,你应该实施Firebase 身份验证 https://firebase.google.com/docs/auth/然后为了检查数据库中是否存在用户,您应该使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("users").child(uid);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if(!dataSnapshot.exists()) {
        //create new user
    }
}

    @Override
    public void onCancelled(DatabaseError error) {
        Log.d("TAG",error.getMessage()); //Don't ignore potential errors!
    }
};
uidRef.addListenerForSingleValueEvent(eventListener);

所以解决这个问题的关键是调用child()方法并将 UID 作为参数传递,而不是调用push()生成随机唯一标识符的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 Firebase 实时数据库中是否已存在用户 的相关文章

  • 如何在java中将日期格式从YYMMDD更改为YYYY-MM-DD? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从机器可读代码中获取日期格式为 YYMMDD 如何将其更改为 YYYY MM DD 例如我收到 871223 YYMMDD 我想把它改成
  • Sun 在 EDT 之外做 GUI 工作的演示?

    我正在看SplashDemo java http download oracle com javase tutorial uiswing examples misc SplashDemoProject src misc SplashDemo
  • Android:canvas.drawBitmap() 方法无法正常工作

    我已经发布了两个与此相关的问题 请参考此自定义饼图 1 https stackoverflow com questions 28343600 customize pie chart in quarter shape at the botto
  • PhoneGap 1.4 封装 Sencha Touch 2.X - 性能怎么样?

    我正在构建一个多平台平板电脑应用程序 仅使用其 Webview 使用 Phonegap 1 4 对其进行包装 然后使用 Sencha Touch 2 框架发挥我的魔力 我所说的多平台是指 iOS 5 X 和 Android 3 0 目前 到
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • Jetpack Compose 中复选框中的透明复选标记

    在我的 Compose 应用程序中 我需要创建一个圆形复选框 我已经通过下面的代码实现了这一点 Composable fun CircleCheckBox isChecked Boolean modifier Modifier Modifi
  • 蓝牙发送和接收文本数据

    我是 Android 开发新手 我想制作一个使用蓝牙发送和接收文本的应用程序 我得到了有关发送文本的所有内容逻辑工作 但是当我尝试在手机中测试它时 我看不到界面 这是Main Activity Code import android sup
  • 在 Java 中获取并存储子进程的输出

    我正在做一些需要我开始子处理 命令提示符 并在其上执行一些命令的事情 我需要从子进程获取输出并将其存储在文件或字符串中 这是我到目前为止所做的 但它不起作用 public static void main String args try R
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 为什么 Google 建议将库复制到您的树中?

    谷歌的Play 服务 API 的使用说明 http developer android com google play services setup html 例如 说 将 extras google google play service
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • Android 4.4 Kitkat 自定义视图操作栏未填充整个宽度

    我试图拥有一个带有自定义视图的简单操作栏 但我得到以下结果 为了演示 我创建了一个带有黄色背景颜色的简单 xml 它应该占据整个宽度 这是 XML
  • Log4j2 ThreadContext 映射不适用于parallelStream()

    我有以下示例代码 public class Test static System setProperty isThreadContextMapInheritable true private static final Logger LOGG
  • Activity 暂停时调用 FragmentManager.popBackStack 是否安全

    的文档FragmentManager popBackStack https developer android com reference android app FragmentManager html popBackStack java
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • Android View Canvas onDraw 未执行

    我目前正在开发一个自定义视图 它在画布上绘制一些图块 这些图块是从多个文件加载的 并将在需要时加载 它们将由 AsyncTask 加载 如果它们已经加载 它们只会被绘制在画布上 这工作正常 如果加载了这些图片 AsyncTask 就会触发v
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp
  • View.post(),以及当Runnables被执行时

    我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改 就我的目的而言 我不一定需要在onCreate 对于我来说 以编程方式添加我的孩子就足够了View根布局完成后 因此我很乐意使用onWindowFocusCh

随机推荐

  • HTTPS + gzip:如果我只 gzip 非敏感文件,是否存在安全漏洞?

    据我了解 如果我将 gzipping 与 SSL HTTPS 一起使用 它会带来安全漏洞 违规 犯罪 如果我只在 CSS 和 JS 文件上使用它 如果这些文件通过 HTTPS 从我的服务器上提供 这仍然是一个安全漏洞吗 据我了解 答案是否定
  • 将字节数组转换为字符串

    我的Scala代码从字节流接收到一个二进制文件 它看起来像 61 62 63 64 内容是 abcd 我使用toString将其转换为p 但失败了 如何将其打印为字符串 如果您知道字节数组的字符集 则始终可以将其转换为字符串 val str
  • Android 上片段的立方体翻转动画

    我想实现一个基本的 3d 立方体 并在 Touch 上水平或垂直旋转 90 度 我想要实现的是类似于下图所示的内容 我已经实现了这个使用ViewPager s ViewTransformer但我对结果并不满意 动画不是很流畅 而且我无法翻转
  • 如何使用 Log4Net 在日志文件中获取当前用户名而不是 AppPool 身份

    我们在 ASP NET MVC3 应用程序中使用 Log4Net 一切正常 但我们希望在日志文件中看到当前用户名而不是应用程序池的标识 这是我们正在使用的附加程序配置
  • 使用jquery在div内添加图像[重复]

    这个问题在这里已经有答案了 每次我点击一个按钮
  • 使用具有大数据集的 SciPy 曲线拟合库时出现运行时错误

    如何使用 SciPy 曲线拟合函数拟合高斯曲线来关闭此错误 换句话说 如果它不适合模型峰值 那么它就不是峰值 所以我不想返回任何东西 另外 有没有更快的方法 curve fit 对于我的应用程序查看大量数据来说可能太慢 运行时错误 未找到最
  • 根据同级值与 XPath 匹配节点

    有一个像这样的 XML 文档
  • static >

    我有以下带有一个静态方法的类 public class Helper public static
  • React js onclick 地图函数中的切换类

    如何处理映射列表 dom 中的切换类 onclick 函数 this state data map function el i var className self state condition list row active inact
  • 将变量数组转换为字符串

    我正在尝试使用 vba 将变量数组转换为字符串 我尝试了两种方法 但都不起作用 它们似乎都在同一点上阻塞 Dim cell As Range Dim val As Variant For Each cell In Range packing
  • 将 JavaScript 类导入另一个类时出现意外的标识符 {classname}

    我正在使用 Node v10 11 0 并从 Ubuntu 18 04 运行此脚本 我的文件设置如下所示 main js import Login from Login mjs class Main constructor const lo
  • 将:click 事件传递到动态创建的

    我基本上需要能够触发一个或多个组件中的某些内容 即 当父级中的图标 按钮时通过 svelte component 动态添加 单击组件 例如我需要挂钩下面用 表示的部分 each charts as chart i div class wra
  • 具有链接时代码生成功能的 MSVC 能否跨 C 和 C++ 进行优化?

    If 链接时代码生成 LTCG https learn microsoft com en us cpp build reference ltcg link time code generation与 MSVC 一起使用时 是否可以跨 C 和
  • 使用 Facebook Graph API 和 HybridAuth 获取好友位置

    Problem 我想得到friends location来自 Facebook Graph API 我正在使用以下方式访问 API混合认证 http hybridauth sourceforge net 框架 如何返回朋友的位置 家乡等 我
  • 带箭头刻度的 Matplotlib 曲线

    我想知道是否可以绘制一条曲线matplotlib带有箭头刻度 就像是 from pylab import y linspace 0 10 0 01 x cos y plot x y gt 应该有这样的曲线 gt gt gt 当 x 增加时
  • JPA 检查实体是否可以删除

    如何检查JPA中的实体是否可以删除并且不会抛出数据完整性异常 我想到的唯一方法是一一检查所有引用的实体 或者尝试在事务中删除然后回滚 但是还有其他更简单的方法吗 如果 可以删除 的意思是 如果实体存在于持久性上下文中 那么您已经回答了您的问
  • iPhone ASIHTTP - 区分 API 调用?

    我目前有一个视图控制器 它实现 ASIHTTP 来处理 API 调用 我的视图控制器触发了 2 个单独的调用 我需要能够区分 requestFinished ASIHTTPRequest request 方法中的两个调用 这样我就可以相应地
  • AWS Step Functions:使用 JsonPath 过滤数组

    我需要在 AWS Step Functions 状态下过滤数组 这似乎是我应该可以使用 JsonPath 轻松实现的目标 但由于某种原因我正在努力 我想要处理的状态如下所示 items id A id B id C 我想通过删除其中的条目来
  • 将表数据存储到 jquery 变量

    我想将表中的数据存储到 jquery 变量中 我使用的代码如下 但此代码将所有表标签 如 tr td 和所有内容 存储到变量中 因为我只需要将数据存储在 td 中以文本格式标记到 jquery 变量 有人可以帮忙吗 var table my
  • 检查 Firebase 实时数据库中是否已存在用户

    我得到了亚历克斯 马莫的解决方案 https stackoverflow com a 47893879 4176989为了检查我的数据库中是否存在唯一值 但快照始终为空 解决方案在这里 DatabaseReference rootRef F