【问题标题】:Twitter OAuth on iOSiOS 上的 Twitter OAuth
【发布时间】:2016-12-26 11:19:20
【问题描述】:

我需要通过 twitter 在我们的服务器上注册。我在 OAuth 的帮助下进行了注册。当我们在我们的服务器上发出任何请求时,我们检查我们的令牌是否处于活动状态,如果我们的令牌过期,我们会在我们的服务器上退出,我需要在 Twitter 会话中退出,我会注销,但会话是活动的。 Android 团队在帮助下做到这一点

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

。我怎样才能在 iOS 上做到这一点?我使用 Swift 请帮帮我。

我的代码

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)
            }

        }
    }

【问题讨论】:

    标签: ios swift twitter oauth


    【解决方案1】:

    我们更改了查询逻辑,因此对于每个请求,我们都不会从 Twitter 框架中请求信息。

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 2012-11-30
      • 2013-07-05
      • 2014-01-14
      • 2011-05-06
      相关资源
      最近更新 更多