Example Facebook Login
This is a working example of implementing login and registering of a user using Vouchr’s Sandbox Login. Creating of the views has been ommitted to show just the steps for actually logging in.
Implementation steps:
- Implement
VOAuthClient
. - Create a JWT Token.
- Create a
Credential
with the JWT Token. - Call login on
VouchrEngine
‘sUserManager
with theCredential
.
Source code:
import UIKit
import VouchrSDK
class VouchrSDKLoginManager: NSObject, VOAuthClient {
var vouchrSDK:VouchrEngine
var credential:Credential?
var username:String?
override init() {
vouchrSDK = VouchrEngine.instance();
}
func login(viewController:UIViewController, completion:@escaping (User) -> Void) {
let username:String? = "someusername"
let password:String? = "somepassword"
self.loginToVouchrSDK(username: username, password: password, completion: completion)
}
func loginToVouchrSDK(username:String?, password:String?, completion:@escaping (User) -> Void) {
self.username = username;
// step 2
let jwtToken = self.createJWTToken(username: username!, password: password!)
// step 3
self.credential = Credential(dictionary: ["networkId": username!,
"network": "JWT_TEST",
"idToken": jwtToken]);
// step 4
self.vouchrSDK.userManager.login(withCredentials: self.credential, authClient: self, onSuccess: {[unowned self] (user) -> Void in
completion(user);
}, onError: { [unowned self] (error) -> Void in
// error handling here
});
}
// step 1
func userForRegistration(with credential: Credential!, onSuccess: ((Credential?, SimpleUser?) -> Void)!, onError: ((Error?) -> Void)!) {
onSuccess(credential, SimpleUser(firstName: "test", lastName: "user", email: self.username!, profileImageUrl: nil, birthday: nil));
}
// CRITICAL: for production uses, jwt must be created/signed by partner login service, not created locally and should be encrypted
private func createJWTToken(username:String, password:String) -> String {
let header:[String: String] = ["alg": "none", "typ": "JWT"]
let payload:[String: String] = ["sub": username]
let headerJWTData:Data = try! JSONSerialization.data(withJSONObject: header,options: JSONSerialization.WritingOptions.prettyPrinted)
let payloadJWTData:Data = try! JSONSerialization.data(withJSONObject: payload, options: JSONSerialization.WritingOptions.prettyPrinted)
let headerJWTBase64:String = headerJWTData.base64EncodedString().replacingOccurrences(of: "=", with: "");
let payloadJWTBase64:String = payloadJWTData.base64EncodedString().replacingOccurrences(of: "=", with: "");
return String(format: "%@.%@", headerJWTBase64, payloadJWTBase64)
}
}