将 Firebase 身份验证与 Firebase 数据库连接
Posted
技术标签:
【中文标题】将 Firebase 身份验证与 Firebase 数据库连接【英文标题】:Connecting Firebase Authentication with Firebase Database 【发布时间】:2019-06-28 03:36:39 【问题描述】:我正在努力将 Firebase 身份验证与我的 ios 应用上的 Firebase 数据库连接起来。
用户已成功通过身份验证并显示在 Firebase 的身份验证部分,但数据(例如姓名/电子邮件)未显示在应存储的 Firebase 数据库中。我已经将代码和调试区域的警告粘贴在下面。
代码:
@objc func handleRegister()
guard let email = emailTextField.text, let password = passwordTextField.text, let name = nameTextField.text
else
print("form is not valid")
return
Auth.auth().createUser(withEmail: email, password: password, completion: (res, err) in
if let err = err
print(err)
return
self.ref = Database.database().reference()
let userId = Auth.auth().currentUser?.uid
self.ref.child("users").child(userId!).setValue(["username": name, "email": email])
(error:Error?, ref:DatabaseReference) in
if let error = error
print("Data could not be saved: \(error).")
else
print("Data saved successfully!")
)
调试区警告:
2019-02-06 19:29:06.735883+0100 MyAwesomeProject[72154:5241459] libMobileGestalt MobileGestalt.c:890:MGIsDeviceOneOfType 不是 在这个平台上支持。
2019-02-06 19:29:06.874146+0100 MyAwesomeProject[72154:5241580] 5.16.0 - [Firebase/Core][I-COR000022] Firebase 分析不可用。要添加它,请在 Podfile 中包含 Firebase/Core 或添加 FirebaseAnalytics.framework 到链接构建阶段
2019-02-06 19:29:08.015632+0100 MyAwesomeProject[72154:5241459] [框架] CUIThemeStore: 没有使用 id=0 注册的主题
2019-02-06 19:29:09.123610+0100 MyAwesomeProject[72154:5241459] [MC] systemgroup.com.apple.configurationprofiles 的系统组容器 路径是 /Users/mikolajseminiuk/Library/Developer/CoreSimulator/Devices/20AB5C8F-2A8E-4F49-8DA6-0BB11A11958F/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2019-02-06 19:29:09.125330+0100 MyAwesomeProject[72154:5241459] [MC] 从私人有效用户设置中读取。
2019-02-06 19:29:19.325723+0100 MyAwesomeProject[72154:5241579] [自动填充] 无法显示 app bundleID 的自动强密码: -234567.MyAwesomeProject 由于错误:iCloud 钥匙串被禁用 2019-02-06 19:29:23.627072+0100 MyAwesomeProject[72154:5242009] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2][0x7fa94a80b030] 获取输出帧失败,状态 8196
2019-02-06 19:29:23.627344+0100 MyAwesomeProject[72154:5242009] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C1.1:2][0x7fa94a80b030] 获取输出帧失败,状态 8196
2019-02-06 19:29:23.628087+0100 MyAwesomeProject[72154:5242009] TIC 读取状态 [1:0x0]: 1:57
2019-02-06 19:29:23.628233+0100 MyAwesomeProject[72154:5242009] TIC 读取状态 [1:0x0]: 1:57
2019-02-06 19:29:23.950084+0100 MyAwesomeProject[72154:5241765] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C2.1:2][0x7fa948614e70] 获取输出帧失败,状态 8196
2019-02-06 19:29:23.950399+0100 MyAwesomeProject[72154:5241765] [BoringSSL] nw_protocol_boringssl_get_output_frames(1301) [C2.1:2][0x7fa948614e70] 获取输出帧失败,状态 8196
2019-02-06 19:29:23.951137+0100 MyAwesomeProject[72154:5241765] TIC 读取状态 [2:0x0]: 1:57
2019-02-06 19:29:23.951409+0100 MyAwesomeProject[72154:5241765] TIC 读取状态 [2:0x0]: 1:57 (lldb)
【问题讨论】:
只用Database.database().reference()
,不要用URL初始化。 Firebase Doc
Data could not be saved because of\(error)
或Data saved sucesfully
的日志在哪里?
【参考方案1】:
首先,您的属性列表文件plist
决定使用什么 Firebase 项目,因此无需指定:
let ref = Database.database().reference(fromURL:"https://myawesomeproject29133.firebaseio.com/")
相反,您在viewDidLoad()
函数上方创建了一个名为ref
的全局变量:
var ref: DatabaseReference!
override func viewDidLoad()
super.viewDidLoad()
在你的handleUser()
:
ref = Database.database().reference()
let userid = Auth.auth().currentUser.uid
self.ref.child("users").child(userid).setValue(["name": name,"email": email])
另外,我强烈建议您在不保存密码的情况下继续操作,除非您对其进行加密。你不应该裸露它们。它存储在 Google 的服务器中,您查看他人密码的理由绝对为零。
【讨论】:
首先感谢您的回答以及诸如不存储密码以及制作全局变量之类的建议,但还有一个问题,正是我将您告诉我的代码放在了我的 handleUser()但是 Xcode 让我打开了这个,我是通过使用 ?并且还守卫让但仍然向我展示了在展开时发现 nil 并且我无法弄清楚使用 ?和后卫甚至!您能否还推荐如何安全地打开它,因为我猜问题出在用户 ID 上。再次感谢您的帮助,我真的很感激。 等我到办公桌前给我几个小时,我很乐意为您提供帮助 好的,没问题,再次感谢,也很抱歉,但我几乎开始使用 Firebase。 是的,当然,请给我 5 分钟 好的,我知道了,谢谢大家的帮助,现在我的程序可以正常运行了以上是关于将 Firebase 身份验证与 Firebase 数据库连接的主要内容,如果未能解决你的问题,请参考以下文章
将 Google 身份验证令牌与 Firebase 一起使用
将 Firebase 身份验证与新的 @App 协议一起使用
将 Firebase 身份验证与 Firestore 一起使用的正确方法是啥?