2017-03-12 6 views
0

Ich baue ein Produkt auf der Grundlage der Realm und Realm Mobile Platform. Ich habe Benutzer authentifiziert sich über die Google Sign In Ich verwende die folgenden in meinem Benutzer Realm Mobile Platform anmeldenVerwendung von Google Anmelden mit Realm Mobile Platform

extension ApplicationDelegate:GIDSignInDelegate{ 
    public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) { 
    let credential = SyncCredentials.google(token: signIn.currentUser.authentication.accessToken) 
    SyncUser.logIn(with: credential, server: authUrl()) { [weak self](user, error) in 

     if let user = user { 
      debugPrint("Signed in!") 
     } else if let error = error as? NSError { 
      debugPrint(error.localizedDescription) 
      //Prints "The provided credentials are invalid" 
     } 
    } 
} 

Es gibt eine in Google-Nutzer angemeldet ist, aber die Antwort ist immer „Die angegebenen Anmeldeinformationen sind ungültig“, das ist nicht sehr hilfreich. Irgendwelche Ideen? Hat jemand Google dazu aufgefordert, sich an der Realm Mobile Platform zu beteiligen?

+0

Haben Sie Setup für Object Google-Authentifizierung? Bitte erfahren Sie mehr hier: https://realm.io/docs/realm-object-server/#authentication – Dmitry

+0

Ja, ich habe die Google-Client-ID für meine App hinzugefügt. Es gibt nicht viele Informationen darüber, welche Art von Anmeldeinformationen für Realm benötigt werden. Webanwendung, Dienstkonto .. Es gibt viele Möglichkeiten, Anmeldeinformationen zu erstellen, und die Realm-Dokumentationen geben keine Anleitung dazu, was Sie verwenden sollten. Für ein Dienstkonto (Server zu Server) wäre ein Clientgeheimnis erforderlich, aber das wird in den Realm-Beispielen nicht erwähnt. Ich habe die Web Application Oauth Client Credentials verwendet, aber es scheint nicht zu funktionieren. – SiPe

+1

Entschuldigung für eine Verzögerung mit Antwort, aber ich habe gerade bemerkt, dass Sie 'signIn.currentUser.authentication.accessToken' anstelle von' user.authentication.idToken' verwenden, wie in den Google-Dokumenten vorgeschlagen. Auch wenn Sie ein Problem gefunden haben, können Sie bitte teilen, was damit zusammenhängt, danke! – Dmitry

Antwort

0

Stellen Sie sicher, dass Sie die richtige Token-Eigenschaft von Google verwenden.

Das Token Sie verwenden müssen, um zu authentifizieren ist

user.authentication.idToken 

und nicht

signIn.currentUser.authentication.accessToken 

die richtige Erweiterung wäre:

extension ApplicationDelegate:GIDSignInDelegate{ 
    public func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error?) { 
    let credential = SyncCredentials.google(token: user.authentication.idToken) 
    SyncUser.logIn(with: credential, server: authUrl()) { [weak self](user, error) in 

     if let user = user { 
      debugPrint("Signed in!") 
     } else if let error = error as? NSError { 
      debugPrint(error.localizedDescription) 
      //Prints "The provided credentials are invalid" 
     } 
    } 
} 
Verwandte Themen