自定义 Firebase 用户身份不使用 Firebase 用户 uid

2023-11-29

我正在玩FirebaseUI-Android并有一个关于在唯一标识用户时使用什么 ID 的问题。 FirebaseUI 管理身份验证权限并返回IdpResponse目的。这可以是例如Facebook、Twitter、电话等等……非常感谢背后的每个人。

因为FirebaseUser.getUid()当用户删除/重新创建他的帐户时可以更改,因此我不想将我的用户数据与FirebaseUser.getUid() token.

将来,如果我决定让用户擦除那里的帐户,当用户回来时,uid 将发生变化,并且我的系统中该用户的所有用户历史记录都无法再访问。另外,将来如果我将系统迁移到某个地方,uid 就不会那么方便了,对吗?

现在我创建了这个包装器(下面的代码)来创建从内部数据推断出的唯一 IDIdpResponse。真的不知道,但我认为这样做永远不会发生“id”冲突,除非有 Google2.0 例如Twitter2.0 :) 对的。同时,由于 id 不是 UUID,因此更容易揭穿系统中的错误。

这是处理用户 ID 问题的推荐方法吗?我真的需要一些关于此的反馈和陷阱警告。

@Override
public String getUserId() {
    String userId;
    FirebaseUser user = getInstance().getCurrentUser();
    if (user.getEmail() != null)
        // User sign in with E-Mail
        userId = user.getEmail().replace(".", ",");
    else if (user.getPhoneNumber() != null){
        // User sign in with Phone
        userId = user.getPhoneNumber();
    }else
        // User sign in with Twitter or Facebook 
        userId = user.getUid();
    return userId;
}

最让我困扰的是 Twitter 或 Facebook,因为我仍然必须使用FirebaseUser.getUid()。是个IdpResponse.getIdpToken()对我们更好?


正如您在帖子中提到的,使用 uid 不是最好的选择。如果用户删除他的帐户并尝试创建另一个帐户,则另一个帐户uid被生成。所以在这种情况下,他丢失了所有数据历史记录。 识别用户的最佳方法是使用email address。该电子邮件地址是唯一的,易于使用,如果将来需要,可以链接Google account with a Facebook account并与Twitter account,根据电子邮件地址,你就可以做id了。因为 Firebase 不接受.密钥中的符号,我建议您对电子邮件地址进行编码,如下所示:

[电子邮件受保护]-> 姓名@电子邮件,com

正如您可能看到的,我更改了点符号.昏迷,。为了实现这一点,我建议您使用以下方法:

static String encodeUserEmail(String userEmail) {
    return userEmail.replace(".", ",");
}

static String decodeUserEmail(String userEmail) {
    return userEmail.replace(",", ".");
}

希望能帮助到你。

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

自定义 Firebase 用户身份不使用 Firebase 用户 uid 的相关文章

  • Android Widget ID 是否持久

    在从桌面删除该 Widget 实例之前 您从操作系统收到的用户桌面上特定 Widget 实例的 Widget ID 是否一致 我找不到任何明确说明这一点的文档 但我假设这是因为文档说您可以使用小部件 id 来存储任何实例配置信息 我想将一些
  • Phonegap(应用程序错误...发生网络错误)

    我已经使用phonegap 创建了一个版本 在index html 文件中 我编写了一个简单的iframe 用于加载网站 当我从phonegap获取本地url时它就起作用了 但如果我将整个构建作为 zip 文件上传到 PhoneGap 中
  • 如何使用具有三种布局的视图翻转器?

    我目前正在使用ViewFlipper我的主要活动有两种不同的布局 我想使用第三种布局 但我只能找到showNext and showPrevious 命令 有人可以告诉我如何使用来实现第三种布局吗ViewFlipper 为您制作了一个示例
  • 清晰的图标 清晰的 Android 应用程序

    你好 下午好 关于如何提高图标的 png 质量 有什么想法吗 我使用了 Android 开发者页面上的套件 但我无法获得清晰的图像 我的意思是非常清晰 我是否需要以不同的方式加载此图标 而不仅仅是拖入我的布局 谢谢 我使用这个布局
  • android:ScrollView(或视差)内的RecyclerView

    我有一个片段2 次卡片浏览内有多个控件 below我有第二个卡片视图回收者视图 这有效perfect 问题是 recyclerview 启动了屏幕的最底部 并且滚动recyclerview非常small 以前使用过列表视图 这使我可以适应您
  • 不使用eclipse安装Android模拟器

    如何在没有eclipse的电脑上安装android模拟器 android模拟器无需安装eclipse 只需下载 android sdk 并安装即可 安装android SDK之前必须先安装JDK 完成后安装成功 您将获得两个应用程序 SDK
  • 将项目添加到 android 框架的设置中

    我正在 android 框架中工作 我想向 android 操作系统中的现有设置添加一个项目 您能告诉我如何执行此操作吗 首先阅读有关偏好活动 http developer android com reference android pre
  • 从 firebase 数据库获取最高分值

    在我的网站上有一些我从 firebase 获得的电影 电影的分数在0到100之间 我已经在我的网站上找到了所有电影 我还想按降序显示它们 例如评分最高的 5 部电影 我怎样才能实现这一点 感谢您的回答 const app initializ
  • 使用 START_STICKY 启动时服务进程被终止后的 onStartCommand

    我一直在阅读 Android 文档 我想知道是否有人可以阐明当以 START STICKY 启动的服务的进程被终止时服务实例会发生什么情况 我假设本地状态数据 实例变量 也丢失了 Android 在重新创建服务时是否会采取任何措施来帮助重新
  • 旋转 Google 地图中的两层标记图标

    在我的应用程序中 我向地图添加了一定数量的标记 如下所示 private fun addMarker googleMap GoogleMap location Location val options MarkerOptions optio
  • 片段活动中的 commitAllowingStateLoss()

    我的应用程序使用片段活动 它仅处于纵向模式 无法旋转屏幕 最初我使用的是commit 方法 但现在我计划不加区别地将这些更改为commitAllowingStateLoss 对于碎片活动 是否有任何理由不不加区别地执行此操作而不重新评估我使
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • Android 5 Lollipop 阴影方向或 y 偏移

    是否有可能改变 Y 偏移的阴影方向 现在我有以下布局
  • 使用 twitter API 1.1 在 Android 应用程序中显示 twitter feed

    基本上我想展示这个提要 https en twitter com epl live https en twitter com epl live在我的应用程序中 由于 twitter 更改了其 api 1 1 每个调用都必须经过授权 我发现的
  • Android:从 PhoneGap 应用打开 Play 商店链接

    我想从我的phonegap 3 4 应用程序打开一个指向Google Play 商店的链接 呼唤market details id com google android apps maps导致 ActivityNotFoundExcepti
  • Grade Plugin 3-alpha1 输出文件导致错误

    我正在尝试将项目更新到 Android Studio 3 build gradle 文件中不再接受以下代码片段 applicationVariants all variant gt variant outputs each out gt d
  • 活动中列表视图中的粘滞行

    我的列表视图中只有一行应该是粘性的 而不是粘性标题中带有字母的部分或部分 我真的很感激任何关于列表视图在活动中粘性一行而不是片段的帮助 我该怎么做 我真的很感谢任何帮助 提前致谢 使用如下代码 class MyAsyncTask exten
  • Android - 检测视图上的双击和三次点击

    我一直在尝试构建一个可以检测双敲击和三敲击的敲击检测器 在我的努力失败后 我在网上搜索了很长时间以找到可以使用的东西 但没有运气 奇怪的是 像这样的图书馆如此稀缺 有什么帮助吗 你可以尝试这样的事情 尽管我通常建议不要使用三次点击作为一种模
  • 在 VideoView 开始播放之前,TextView 不会显示

    我编写了一个android应用程序 它有两个视图 TextView上方的VideoView 位于ScrollView内部 我遇到了一个问题 直到VideoView开始播放视频 TextView才显示 并且我有一个黑屏 这可能需要很长一段时间
  • 通过条件将 Firebase 云消息传递 (FCM) 发送到多个主题的正确语法是什么

    简而言之 我想使用 Google Cloud Functions 向订阅主题组合的设备发送通知 文档说 主题中的 TopicA 主题中的 TopicB 主题中的 TopicC 我试图做的是 var topicsConditions type

随机推荐

  • 使用 jQuery 获取文件输入的选定文件名(不带路径)

    我用过这个 input type file val 获取选定的文件名 但它返回完整路径 如 C fakepath filename doc fakepath 部分实际上在那里 不确定它是否应该在那里 但这是我第一次使用文件上传的文件名 我怎
  • 在 JSfiddle 中添加图像 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想创建一个小提琴 在其中我必须添加图像 作为 div 的背景图像 我尝试使用左侧的添加资源 但它不起作用 我还尝试在我的文件夹结构中提供图像的完整路径 但这也不起作用 有人知道该怎
  • 在Python中从矩阵中选择列向量

    我想在 Python numpy 中的矩阵中索引列向量 并将其作为列向量而不是一维数组返回 x np array 1 2 3 4 x 1 gt array 2 4 Giving np transpose x 1 不是一个解决方案 继nump
  • 在 R 中绘制多项式回归曲线

    我有一个简单的多项式回归 如下所示 attach mtcars fit lt lm mpg hp I hp 2 现在 我绘制如下 gt plot mpg hp gt points hp fitted fit col red pch 20 这
  • Flash & Flex SDK/AS3 - 如何保持键盘焦点?

    我正在 Flex AS3 中编写 Flash 应用程序 但我似乎无法为其分配键盘焦点 我在开发初期就注意到了这个问题 并添加了一个带有 立即播放 按钮的启动屏幕 以吸引用户点击 但是 用户必须在应用程序上再次单击才能使键盘正常工作 更糟糕的
  • 如何在 Qt 项目中包含库

    我正在尝试创建一个使用 TagLib 库的项目 我不太确定到底该怎么做 我已经下载了标签库 1 11 1 我构建它如下 构建 zlib 首先让 CMake 创建一个 Visual Studio 解决方案文件 然后使用 Visual Stud
  • 使用访问器将属性设置为新分配的对象会导致内存泄漏

    我只是想确认以下是否会导致内存泄漏 h file property nonatomic retain MyObject foo m file synthesize foo self foo MyObject alloc init deall
  • ArrayList .get 比 HashMap .get 快吗?

    我本来以为HashMap随机访问单个值的速度比ArrayLists 也就是说 HashMap get key 应该比ArrayList get index 仅仅因为ArrayList必须遍历集合的每个元素才能达到其值 而HashMap才不是
  • ject() 必须从注入上下文中调用

    我正在尝试将我的 Angular 应用程序导出为 npm 模块以供其他应用程序使用 但遇到了一些困难 我在互联网上的其他地方找不到这个错误 我已经无能为力了 我按照这个教程进行操作 https medium com nikolaslebla
  • 为什么 Azure Bot Service Slack 连接器不转发事件和交互式消息?

    更新 2020 年 6 月 30 日 经过更多测试后 我获得了一些详细信息 可以帮助其他人识别我的问题 问题似乎是 Slack 正在将数据发送到 Azure Bot 服务 但该数据没有转发到我的代码 我已经能够毫无问题地使用机器人模拟器 并
  • IP 地址“::1”是什么?

    我正在没有网络连接的本地计算机上使用套接字 见下文 IPAddress address IPAddress Any doesn t work IPAddress address IPAddress Parse 1 works 那么到底是什么
  • 根据购物车总金额的百分比支付押金

    我从另一篇文章中获取了这段代码 基本上根据我的理解 这段代码试图强制购物车价格更改为 40 美元的固定金额 并将其作为预订费收取 我想要做的是强制购物车金额为购物车中所有产品总和的 20 我的网站是为了预订 所以我只想收取押金然后让他们在使
  • Woocommerce 3 中的自定义结账字段和运输方式 ajax 交互

    这个问题很快就会让我去邮寄 在 Woocommerce Checkout 中 我需要在地址中添加自定义字段 这个额外的字段用于function calculate shipping package array 现在显然 woocommerc
  • IOS - 无法以编程方式打开 Whatsapp 聊天,但可以通过 HTML 来打开

    我有一个网页 其锚点包含 href whatsapp xxxxxxxxx 如果我在 iPhone iOS 9 上单击它 它会在该联系人的聊天视图中打开 WhatsApp 我可以看到所有我与联系人进行的聊天 但是 如果我以编程方式执行此操作
  • RewriteRule - html 损坏 - 就像缺少 css

    我对这个规则有疑问 RewriteRule d more php books 1 tags 2 L 执行此规则后 一切正常 但页面显示不正确 就像缺少CSS一样 提前致谢 当您有 CSS 文件的相对 URL 时 可能会发生这种情况 如果您访
  • C++ ifstream从linux到arduino

    原始代码 include
  • 如何在 txt 文件中写入,iOS 7

    我正在尝试为 iOS 7 制作一个 iPhone 应用程序 我在我的项目中创建了一个txt文件 并且希望能够从txt文件中写入文本 当我按下写入按钮时 写入并能够读取数据 当我按下读取按钮时 读 当我尝试读取数据时 我发现这种方法有效 IB
  • 尽管传递了参数列表,为什么将变量传递给 subprocess.Popen 不起作用?

    我有一个脚本调用另一个Python脚本subprocess Popen 但是因为我有参数存储在变量中 servers server address servers server port servers server pass 我无法执行该
  • 异步.NET控制台程序中的线程控制流[重复]

    这个问题在这里已经有答案了 我在 C 中摆弄 async await 只是为了深入研究一些线程控制流 并偶然发现了一个不寻常的行为 我非常感谢对此的澄清 即使任务本身在后台执行 await 之后的执行也会在调用线程上继续 这是有意义的 事实
  • 自定义 Firebase 用户身份不使用 Firebase 用户 uid

    我正在玩FirebaseUI Android并有一个关于在唯一标识用户时使用什么 ID 的问题 FirebaseUI 管理身份验证权限并返回IdpResponse目的 这可以是例如Facebook Twitter 电话等等 非常感谢背后的每