菜鸟教程小白 发表于 2022-12-11 17:18:18

ios - iOS 上的 Twitter OAuth


                                            <p><p>我需要通过 twitter 在我们的服务器上注册。我在 OAuth 的帮助下进行了注册。当我们在我们的服务器上发出任何请求时,我们会检查我们的 token 是否处于事件状态,如果我们的 token 已过期,我们会在我们的服务器上辞职,我需要在 Twittersession 中退出,我会注销,但 session 是事件的。 Android 团队在帮助下做到这一点</p>

<pre><code>TwitterCore.getInstance().getSessionManager().clearActiveSession();
TwitterCore.getInstance().logOut();
</code></pre>

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

<p>我的代码</p>

<pre><code>func auth(userEmail: String?, successLoginCallback: ((usr : User) -&gt; Void)?, failLoginCallback: ( (message: String) -&gt; 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? 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(&#34;user token&#34;, 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: (() -&gt; ())?) {
      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: , success: ((user: User) -&gt; ())?, fail: ((errorMessage: String?) -&gt; ())?) {
      let url = &#34;\(Networking.baseUrl)/auth/login/tw&#34;
      guard let oauth_url = parameters[&#34;X-Auth-Service-Provider&#34;] as? String else { return }
      guard let oauth_params = parameters[&#34;X-Verify-Credentials-Authorization&#34;] as? String else { return }
      var passParameters = ()
      if email != nil {
            passParameters = [&#34;email&#34; : email!, &#34;oauth_url&#34; : oauth_url, &#34;oauth_params&#34;: oauth_params]
      } else {
            passParameters = [&#34;oauth_url&#34; : oauth_url, &#34;oauth_params&#34;: oauth_params]
      }
      print(&#34;Twitter manager passParameters&#34;, passParameters, &#34;Twitter manager passParameters&#34;)

      Networking.manager.request(.POST, url, parameters: passParameters, encoding: .JSON, headers: nil).responseObject { (response: Response&lt;RegisterResponse, NSError&gt;) 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&lt;User&gt;().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)
            }

      }
    }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我们更改了查询逻辑,因此对于每个请求,我们都不会从 Twitter 框架中请求信息。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - iOS 上的 Twitter OAuth,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/39036618/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/39036618/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - iOS 上的 Twitter OAuth