2016-08-19 9 views
1

Ich muss auf unserem Server über Twitter registrieren. Ich habe Registrierung mit Hilfe von OAuth gemacht. Wenn wir eine Anfrage auf unserem Server machen, überprüfen wir, ob unser Token aktiv ist. Wenn unser Token abgelaufen ist, treten wir auf unserem Server zurück und ich muss in der Twitter-Sitzung zurücktreten. Ich melde mich ab, aber die Sitzung ist aktiv. Android Team macht es mit HilfeTwitter OAuth auf iOS

TwitterCore.getInstance().getSessionManager().clearActiveSession(); 
TwitterCore.getInstance().logOut(); 

. Wie kann ich es unter iOS machen? Ich benutze Swift Bitte, hilf mir.

Mein Code

func auth(userEmail: String?, successLoginCallback: ((usr : User) -> Void)?, failLoginCallback: ((message: String) -> Void)?) { 
    Twitter.sharedInstance().sessionStore.reloadSessionStore() 
    Twitter.sharedInstance().startWithConsumerKey(twitterKey, consumerSecret: twitterSecret) 
    Twitter.sharedInstance().logInWithCompletion { (session, error) in 
     if session != nil { 
      TWTRAPIClient.clientWithCurrentUser().requestEmailForCurrentUser({ (twitterEmail, error) in 
       // oauth parameters 
       let oauthSession = TWTRSession(authToken: session!.authToken, authTokenSecret: session!.authTokenSecret, userName: session!.userName, userID: session!.userID) 

       let oauthSigning = TWTROAuthSigning(authConfig: Twitter.sharedInstance().authConfig, authSession: oauthSession) 
       let headers = oauthSigning.OAuthEchoHeadersToVerifyCredentials() 
       guard let authHeaders = headers as? [String : AnyObject] else { 
        return 
       } 
       var passEmail: String? 
       if userEmail != nil { 
        passEmail = userEmail 
       } 
       UserManager.sharedManager.logInViaTwitter(passEmail, parameters: authHeaders, success: { (user) in 
        self.userIsLogginedViaTwitter = true 
        self.twitterSuccessLogin(user) 
        print("user token", user.token?.expr) 
        successLoginCallback?(usr: user) 
        }, fail: { (errorMessage) in 
         if errorMessage != nil { 
          self.twitterFailsLogin(errorMessage!) 
          failLoginCallback?(message: errorMessage!) 
         } 
       }) 
      }) 
     } 
     if error != nil { 
      print(error?.localizedDescription) 
     } 
    } 
} 

func logOut(success: (() ->())?) { 
     Twitter.sharedInstance().startWithConsumerKey(twitterKey, consumerSecret: twitterSecret) 
     guard let userID = Twitter.sharedInstance().sessionStore.session()?.userID else { return } 
     Twitter.sharedInstance().sessionStore.logOutUserID(userID) 
     userIsLogginedViaTwitter = false 
     let cookieStorage: NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage() 
     cookieStorage.cookies?.forEach({ (cook) in 
      cookieStorage.deleteCookie(cook) 
     }) 
     success?() 
    } 



// MARK: - Twitter functions 
    func logInViaTwitter(email: String?, parameters: [String : AnyObject], success: ((user: User) ->())?, fail: ((errorMessage: String?) ->())?) { 
     let url = "\(Networking.baseUrl)/auth/login/tw" 
     guard let oauth_url = parameters["X-Auth-Service-Provider"] as? String else { return } 
     guard let oauth_params = parameters["X-Verify-Credentials-Authorization"] as? String else { return } 
     var passParameters = [String : AnyObject]() 
     if email != nil { 
      passParameters = ["email" : email!, "oauth_url" : oauth_url, "oauth_params": oauth_params] 
     } else { 
      passParameters = ["oauth_url" : oauth_url, "oauth_params": oauth_params] 
     } 
     print("Twitter manager passParameters", passParameters, "Twitter manager passParameters") 

     Networking.manager.request(.POST, url, parameters: passParameters, encoding: .JSON, headers: nil).responseObject { (response: Response<RegisterResponse, NSError>) in 
      guard let result = response.result.value else { 
       fail?(errorMessage: nil) 
       return 
      } 

      if result.meta?.errors.count == 0 { 
       print(result.response) 
       guard let user = Mapper<User>().map(result.response) else { 
        fail?(errorMessage: nil) 
        return 
       } 
       // Save state in Twitter manager 
       TwitterManager.sharedManager.userIsLogginedViaTwitter = true 
       self.saveCurrentUser(user) 
       success?(user: user) 
      } else { 
       fail?(errorMessage: result.meta?.errors.first?.message) 
      } 

     } 
    } 

Antwort

0

Wir haben die Abfragelogik geändert haben, so dass bei jeder Anfrage wir keine Informationen aus dem Rahmen Twitter angefordert haben.