Ich benutze Firebase für die Google-Anmeldung in meiner App. Die Regeln erlauben nur die Anmeldung für meine Unternehmensdomäne. Wenn ich eine @ mydomain.com-Mail verwende, meldet sich der Benutzer korrekt an. Wenn ich versuche, mit einer anderen E-Mail melden Sie sich an, ich habe nur eine Nachricht in der Konsole wie folgt aus:Abfangen Firebase Login-Ereignis "fehlgeschlagen: permission_denied"
[Firebase/Database][-----] Listener at /user_profiles/... failed: permission_denied.
aber die App bleibt auf der Login-View-Controller und nichts appens.
Es gibt eine Möglichkeit, diese Nachricht abzufangen, damit ich eine Warnung auf dem Bildschirm anzeigen kann?
my code in app delegate didFinishLaunchingWithOptions
Dies ist kein Login-Fehler, da gmail Login und Feuerbasis Login funktioniert und Fehler nie aufgerufen werden. Der Fehler ist ein Schreib/Lese-Fehler aufgrund meiner Einschränkung für die Unternehmensdomäne. Wo kann ich den Lese-/Schreibfehler behandeln?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// Use Firebase library to configure APIs
FirebaseApp.configure()
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
GIDSignIn.sharedInstance().delegate = self
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
return GIDSignIn.sharedInstance().handle(url,
sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
annotation: options[UIApplicationOpenURLOptionsKey.annotation])
}
//let mainStoryboard: UIStoryboard = UIStoryboard(name:"Main", bundle: nil)
func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
if let error = error {
print("error:")
print(error.localizedDescription) // never called
return
}
print("Gmail login - OK")
let authentication = user.authentication
let credential = GoogleAuthProvider.credential(withIDToken: (authentication?.idToken)!,accessToken: (authentication?.accessToken)!)
Auth.auth().signIn(with: credential) { (user, error) in
if let error = error {
print("error:")
print(error.localizedDescription) // never called
return
}
print("Firebase login - OK")
self.databaseRef = Database.database().reference()
self.databaseRef.child("user_profiles").child(user!.uid).observeSingleEvent(of: .value, with: { (snapshot) in
let snapshot = snapshot.value as? NSDictionary
if(snapshot == nil) {
self.databaseRef.child("user_profiles").child(user!.uid).child("name").setValue(user?.displayName)
self.databaseRef.child("user_profiles").child(user!.uid).child("email").setValue(user?.email)
}
self.window?.rootViewController?.performSegue(withIdentifier: "HomeViewSegue", sender: nil)
})
}
}
Dies wird durch Ihre Regeln verursacht - jedoch ohne Ihren Login-Code zu sehen, Firebase-Regeln und Struktur können wir nicht beantworten. Sie können jedoch Firebase-Fehler in einem Firebase-Abschluss nach einem Firebase-Aufruf behandeln. Viele haben einen Fehler var, der gesetzt ist, der den Fehler enthält. – Jay
Ich habe den Beitrag mit meinem Code aktualisiert. Die Firebase-Schließungen werden nie aufgerufen, da der Login funktioniert. Wo kann ich den Lese-/Schreibfehler überprüfen? – Danilo
Verschlüsse * Immer * ausführen, damit Sie beim Anmelden weitere Funktionen ausführen oder Fehler behandeln können. In Ihrem Fall wird dieser Fehler nicht durch die Anmeldung ausgelöst. Er wird aufgerufen, wenn Sie versuchen, auf einen Knoten zuzugreifen, dessen Regeln die Berechtigung verweigern. Diese Zeile * self.databaseRef.child ("user_profiles"). Child (user! .uid) .observeSingleEvent * löst den Fehler aus und es gibt keinen Fehlerbehandlungscode. Dieser Knoten hat die Auswertung für false gelesen, daher der Fehler. – Jay