verwalten bitte helfen Sie mir, richtige Lösung in der folgenden Situation zu finden.Wie man Benutzer unterschiedliche Authentifizierung in Firebase
Ich entwickle iOS-App mit Swift, die Firebase als Backend verwenden wird.
Benutzer sollten sich in Firebase mit E-Mail/Passwort oder/und mit Facebook einloggen können. Vielleicht wird Google später hinzugefügt.
Es ist wichtig für jeden echten Benutzer ein Firebase-Konto zu haben, da der Benutzer Bonuspunkte hat und es keinen Sinn ergibt, wenn er auf einem Gerät (mit Email-Login) X-Punkte und auf einem anderen Gerät hat (mit facebook) wird er verschiedene Punkte haben.
Hier ist der Code, den ich mit E-Mail anmelden bin mit:
//EMAIL REGISTER
@IBAction func registerAction(_ sender: Any) {
if self.emailTextField.text == "" || self.passwordTextField.text == "" {
Print("Please enter email and password.")
} else {
FIRAuth.auth()?.createUser(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!, completion: { (user, error) in
if error == nil {
self.logoutButton.isHidden = false
self.usernameLabel.text = user!.email
self.emailTextField.text = ""
self.passwordTextField.text = ""
} else {
Print("\((error?.localizedDescription)!)")
}
})
}
}
//EMAIL LOGIN
@IBAction func loginAction(_ sender: Any) {
if self.emailTextField.text == "" || self.passwordTextField.text == "" {
print("Please enter email and password.")
} else {
FIRAuth.auth()?.signIn(withEmail: self.emailTextField.text!, password: self.passwordTextField.text!, completion: { (user, error) in
if error == nil {
self.logoutButton.isHidden = false
self.usernameLabel.text = user!.email
self.emailTextField.text = ""
self.passwordTextField.text = ""
} else {
Print("\((error?.localizedDescription)!)")
}
})
}
}
Hier ist der Code, den ich mit Facebook anmelden bin mit:
func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) {
self.fbLoginButton.isHidden = true
if error != nil {
self.fbLoginButton.isHidden = false
print(error.localizedDescription)
return
} else if (result.isCancelled) {
print("canceled")
self.fbLoginButton.isHidden = false
} else {
let credential = FIRFacebookAuthProvider.credential(withAccessToken: FBSDKAccessToken.current().tokenString)
FIRAuth.auth()?.signIn(with: credential) { (user, error) in
if let error = error {
print(error.localizedDescription)
return
}
}
}
}
Beide Methoden funktionieren, aber sie schaffen zwei getrennte Konten.
Es ist eingerichtet, um mehrere Benutzer mit der gleichen E-Mail in den Einstellungen zu erlauben:
und ich am Ende mit folgendem Ergebnis:
Offensichtlich mag ich diese beiden Konten automatisch zusammengeführt werden.
Documentation beschreibt die Art, wie Auth-Provider zu verknüpfen, aber Benutzer sollten mit einer Methode angemeldet sein und erst danach wird es möglich sein, Konten zu verknüpfen. linkWithCredential
Methode wird verwendet, wenn Sie bereits die oauth-Berechtigung besitzen. Falls der Benutzer auf einem Gerät mit E-Mail erstellt wurde, funktioniert es nicht, wenn er sich wieder auf einem anderen Gerät mit Facebook anmeldet.
Nachdem er mit einem dieser Wege loggin in der FIRAuth.auth()?.addStateDidChangeListener
Service zweite View-Controller zeigt, wo ich mit Datenbank arbeiten werde.
Überschreibung func viewDidLoad() { super.viewDidLoad()
let user = FIRAuth.auth()?.currentUser
let dat = user?.providerData
let email = user?.providerData[0].email
let name = user?.displayName
if email != nil {
self.ref.child("user_profile").child("\(user!.uid)/email").setValue(email)
}
if name != {
self.ref.child("user_profile").child("\(user!.uid)/name").setValue(name)
}
}
Let sagen wir mit Facebook loggin, vielleicht ist es möglich, UID des Benutzers mit derselben E-Mail zu finden und Updates laufen ? Nicht sehr gute Idee, wenn es viele Benutzer gibt.
Andere Idee ist, E-Mail, id wie folgt zu verwenden:
self.ref.child("user_profile").child("\(email)/name").setValue(name)
Nicht sicher, ob es eine gute Option ist?
danke für Ihre Antworten.
Hallo, wenn ich die Erstellung mehrerer accs verhindern wählen ... Ich kann nicht mit Facebook anmelden, nachdem ich mit E-Mail und Passwort-Konto erstellt. (weil E-Mail dasselbe ist). Ich benutze den gleichen Code, den Sie für die Anmeldung mit E-Mail & Passw geschrieben haben. Oder ich vermisse etwas? – Almazini
Sagen wir, ich habe bereits einen Account mit Email und Passwort. Und ich möchte mich mit Facebook auf einem anderen Gerät anmelden. Und ich möchte mich bei bestehenden Benutzern anmelden, ohne neue zu erstellen. – Almazini
Ill edit meine Antwort ... – Jad