2016-05-19 7 views
1

Ich verwende Parse Server, um meine App zu hosten und derzeit mit einem Benutzernamen und einem Passwort zusammen mit Facebook zu authentifizieren. Ich möchte auch Google verwenden. Es scheint keine Anleitung zu geben, wie dies zu tun ist, daher wird jede Hilfe geschätzt.Wie implementiere ich Google Anmelden bei Parse Server unter iOS?

Ich bin vertraut mit der Verwendung des Google SignIn SDK für iOS, aber es ist einfach nicht mit Parse zu integrieren.

Danke.

+0

Hey Dylan, hast du das aussortiert? –

Antwort

0

aktiviert oauth auf dem Server (wird in weiterem Updates veraltet und geändert auth)

oauth: { 
    google: true 
}, 

Auf der Client-Seite erstellen AuthDelegate

class AuthDelegate : NSObject, PFUserAuthenticationDelegate { 
    func restoreAuthentication(withAuthData authData: [String : String]?) -> Bool { 
     return true 
    } 
} 

Verwenden Sie den Google-SDK signin und erhalten die Benutzer-ID und AccessToken

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 
    print(user.userID) 
    print(user.authentication.accessToken) 
    print(user.authentication.accessTokenExpirationDate) 
} 

Set auth Daten

let authd : [String: String] = ["id":"\(user.userID!)","expiration_date":"\(user.authentication.accessTokenExpirationDate!)","access_token":"\(gToken!)"] 

Anmeldung in Parse über Auth

PFUser.logInWithAuthType(inBackground: "google", authData: authd) 

Bitte beachten Sie, dass Sie accesstoken Sie sich über die Erneuerung des denken (Client oder Server-Seite)

0

Hier ist meine Version der Implementierung von Google Anmeldung mit Server parsen.

import UIKit 
import Parse 
import KVNProgress 
import GoogleSignIn 

class GoogleAuthWorker: NSObject { 
    /// http://nsdateformatter.com 
    lazy var dateFormatter: DateFormatter = { 
     let formatter = DateFormatter() 
     formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" 
     return formatter 
    }() 

    var googleSignIn = GIDSignIn.sharedInstance() 
    var completion: (Error?) -> Void = { } 
    weak var host: UIViewController? 

    /// Logs in with Google. Presents Safari view controller from the host view controller. 
    func logInWithGoogle(host: UIViewController?, completion: @escaping (Error?) -> Void) { 
     self.completion = completion 
     self.host = host 
     PFUser.register(self, forAuthType: "google") 
     googleSignIn?.delegate = self 
     googleSignIn?.uiDelegate = self 
     googleSignIn?.signIn() 
    } 
} 

// MARK: - PFUserAuthenticationDelegate 
extension GoogleAuthWorker: PFUserAuthenticationDelegate { 
    func restoreAuthentication(withAuthData authData: [String : String]?) -> Bool { 
     // Check whether expiration date is in future or not. 
     guard let expirationDateString = authData?["expiration_date"], 
      let expirationDate = dateFormatter.date(from: expirationDateString) else { return false } 
     return expirationDate > Date() 
    } 
} 

// MARK: - GIDSignInDelegate 
extension GoogleAuthWorker: GIDSignInDelegate { 
    func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) { 
     guard let user = user else { 
      let appError = AppError.googleError(underlyingError: error) 
      self.completion(.failure(error: appError)) 
      return 
     } 
     let authData: [String: String] = ["id": user.userID, 
              "id_token": user.authentication.idToken, 
              "expiration_date": "\(user.authentication.accessTokenExpirationDate!)", 
              "access_token": user.authentication.accessToken] 
     // Ask PFUser to log in with given auth data. 
     PFUser.logInWithAuthType(inBackground: "google", authData: authData).continue({ (task) -> Any? in 
      if let userObject = task.result { 
       // Fill userObject (which is PFUser) by profile data, like: 
       //userObject.email = user.profile.email 
       //userObject.password = UUID().uuidString 
       //userObject["firstName"] = user.profile.givenName 
       //userObject["lastName"] = user.profile.familyName 
       self.completion(nil) 
      } else { 
       // Failed to log in. 
       self.completion(task.error) 
      } 
      return nil 
     }) 
    } 
} 

// MARK: - GIDSignInUIDelegate 
extension GoogleAuthWorker: GIDSignInUIDelegate { 
    func sign(inWillDispatch signIn: GIDSignIn!, error: Error!) { 
    } 

    func sign(_ signIn: GIDSignIn!, present viewController: UIViewController!) { 
     host?.present(viewController, animated: true, completion: nil) 
    } 

    func sign(_ signIn: GIDSignIn!, dismiss viewController: UIViewController!) { 
     host?.dismiss(animated: true, completion: nil) 
    } 
} 
Verwandte Themen