如何在特定的数据库引用中使用FIRApp.createUserWithEmail?
How to use FIRApp.createUserWithEmail in specific database reference?
我一直在将我的 post Firebase 2 代码库转换为 Firebase 3,但遇到了一些麻烦。
基本上我在尝试弄清楚如何在我的 Firebase 数据库的特定位置创建新用户。
目标 - 我要保存所有新用户@var _USER_REF = FIRDatabaseReference().child("\(BASE_URL)/users")
这是目前为止的代码。
class DataService {
static let dataService = DataService()
let BASE_URL = "https://project-1321.firebaseio.com"
var _BASE_REF = FIRDatabaseReference().child(BASE_URL)
var _USER_REF = FIRDatabaseReference().child("\(BASE_URL)/users")
var _NEWS_REF = FIRDatabaseReference().child("\(BASE_URL)/news")
var _MARKET_STATS = FIRDatabaseReference().child("\(BASE_URL)/market")
var CURRENT_USER_REF: FIRDatabaseReference {
let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String
let currentUser = FIRDatabaseReference().child("\(_BASE_REF)").child("users").child(userID)
//let currentUser = Firebase(url: "\(BASE_REF)").childByAppendingPath("users").childByAppendingPath(userID)
return currentUser
}
func createNewAccount(uid: String, user: Dictionary<String, String>) {
_USER_REF.child(uid).setValue(user)
}
}
View Controller
@IBAction func registerAccount(sender: AnyObject) {
guard let email = self.emailRegField.text where !self.emailRegField.text!.isEmpty else {
return
}
guard let username = self.usernameRegField.text where !self.usernameRegField.text!.isEmpty else {
return
}
guard let password = self.passwordRegField.text where !self.passwordRegField.text!.isEmpty else {
return
}
FIRAuth.auth()?.createUserWithEmail(email, password: password) {
(user, error) in
if error != nil {
print(error)
self.signUpErrorAlert("Alert", message: "There was a problem signing up!")
} else {
let user = ["provider": user?.providerID, "email": email, "username": username]
DataService.createNewAccount(user) // Doesnt Work
}
//Store UID in NSDefaults so if user reopen app they automatically log in if UID exsisits.
NSUserDefaults.standardUserDefaults().setValue(result ["uid"], forKey: "uid")
// Segue New User
self.performSegueWithIdentifier("newUserSegue", sender: nil)
}
// 登录已将 UID 保存到 NSDefaults 的用户
当用户登录或注册时,我计划将他们的 "UID" 保存到 NSDefaults。
然后像这样检查:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if NSUserDefaults.standardUserDefaults().valueForKey("uid") != nil {
self.performSegueWithIdentifier("newUserSegue", sender: nil)
} else {
print("User is not registered or has their UID saved to NSDefaults")
}
}
这种方法安全吗?
我认为新的 Firebase 没有必要,查看仪表板,所有用户都应该在 "Auth" 选项卡下,
此外,这一行在新的 Firebase 中没有任何意义,您正在查询的 URL 在您下载的 .plist 中。
let BASE_URL = "https://project-1321.firebaseio.com" //remove this line
并使用类似这样的东西
let firebaseRef = FIRDatabase.database().reference()
let newsRef = firebaseRef.child("news")
你可以在这里找到很多有用的信息https://firebase.google.com/docs/auth/ios/password-auth#sign_in_a_user_with_an_email_address_and_password
@brkr 回应您上面的评论,您仍然可以使用 UID 将唯一用户添加到您的 Firebase 数据库。
例如,这是您的用户参考号(在 DataService Class 中):
let REF_USERS = FIRDatabase.database().referenceFromURL("\(URL_BASE)/users")
现在,在 Firebase 3.0 中创建一个用户:
FIRAuth.auth()!.createUserWithEmail(email, password: pwd, completion: { authData, error in
if error == nil {
// Log user in
FIRAuth.auth()?.signInWithEmail(email, password: pwd) { authData, error in
// Save user information to Firebase data
let user = // your user Dictionary
DataService.createNewAccount(authData!.uid, user: user)
}
} else {
// Handle login error here
}
})
创建账户方法代码:
func createNewAccount(uid: String, user: Dictionary<String, String>) {
REF_USERS.child(uid).setValue(user)
}
我一直在将我的 post Firebase 2 代码库转换为 Firebase 3,但遇到了一些麻烦。
基本上我在尝试弄清楚如何在我的 Firebase 数据库的特定位置创建新用户。
目标 - 我要保存所有新用户@var _USER_REF = FIRDatabaseReference().child("\(BASE_URL)/users")
这是目前为止的代码。
class DataService {
static let dataService = DataService()
let BASE_URL = "https://project-1321.firebaseio.com"
var _BASE_REF = FIRDatabaseReference().child(BASE_URL)
var _USER_REF = FIRDatabaseReference().child("\(BASE_URL)/users")
var _NEWS_REF = FIRDatabaseReference().child("\(BASE_URL)/news")
var _MARKET_STATS = FIRDatabaseReference().child("\(BASE_URL)/market")
var CURRENT_USER_REF: FIRDatabaseReference {
let userID = NSUserDefaults.standardUserDefaults().valueForKey("uid") as! String
let currentUser = FIRDatabaseReference().child("\(_BASE_REF)").child("users").child(userID)
//let currentUser = Firebase(url: "\(BASE_REF)").childByAppendingPath("users").childByAppendingPath(userID)
return currentUser
}
func createNewAccount(uid: String, user: Dictionary<String, String>) {
_USER_REF.child(uid).setValue(user)
}
}
View Controller
@IBAction func registerAccount(sender: AnyObject) {
guard let email = self.emailRegField.text where !self.emailRegField.text!.isEmpty else {
return
}
guard let username = self.usernameRegField.text where !self.usernameRegField.text!.isEmpty else {
return
}
guard let password = self.passwordRegField.text where !self.passwordRegField.text!.isEmpty else {
return
}
FIRAuth.auth()?.createUserWithEmail(email, password: password) {
(user, error) in
if error != nil {
print(error)
self.signUpErrorAlert("Alert", message: "There was a problem signing up!")
} else {
let user = ["provider": user?.providerID, "email": email, "username": username]
DataService.createNewAccount(user) // Doesnt Work
}
//Store UID in NSDefaults so if user reopen app they automatically log in if UID exsisits.
NSUserDefaults.standardUserDefaults().setValue(result ["uid"], forKey: "uid")
// Segue New User
self.performSegueWithIdentifier("newUserSegue", sender: nil)
}
// 登录已将 UID 保存到 NSDefaults 的用户
当用户登录或注册时,我计划将他们的 "UID" 保存到 NSDefaults。
然后像这样检查:
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if NSUserDefaults.standardUserDefaults().valueForKey("uid") != nil {
self.performSegueWithIdentifier("newUserSegue", sender: nil)
} else {
print("User is not registered or has their UID saved to NSDefaults")
}
}
这种方法安全吗?
我认为新的 Firebase 没有必要,查看仪表板,所有用户都应该在 "Auth" 选项卡下,
此外,这一行在新的 Firebase 中没有任何意义,您正在查询的 URL 在您下载的 .plist 中。
let BASE_URL = "https://project-1321.firebaseio.com" //remove this line
并使用类似这样的东西
let firebaseRef = FIRDatabase.database().reference()
let newsRef = firebaseRef.child("news")
你可以在这里找到很多有用的信息https://firebase.google.com/docs/auth/ios/password-auth#sign_in_a_user_with_an_email_address_and_password
@brkr 回应您上面的评论,您仍然可以使用 UID 将唯一用户添加到您的 Firebase 数据库。
例如,这是您的用户参考号(在 DataService Class 中):
let REF_USERS = FIRDatabase.database().referenceFromURL("\(URL_BASE)/users")
现在,在 Firebase 3.0 中创建一个用户:
FIRAuth.auth()!.createUserWithEmail(email, password: pwd, completion: { authData, error in
if error == nil {
// Log user in
FIRAuth.auth()?.signInWithEmail(email, password: pwd) { authData, error in
// Save user information to Firebase data
let user = // your user Dictionary
DataService.createNewAccount(authData!.uid, user: user)
}
} else {
// Handle login error here
}
})
创建账户方法代码:
func createNewAccount(uid: String, user: Dictionary<String, String>) {
REF_USERS.child(uid).setValue(user)
}