首页 > 解决方案 > 每小时运行一次 OAuth URLRequest?- 斯威夫特

问题描述

我在我的 iOS 应用程序中使用了一个 API,它只允许用户在一个小时内拥有 OAuth 访问令牌。我将如何每小时获取一个新的访问令牌?我会设置一个TimeInterval或如何检查访问令牌是否已过期?

以下是我如何使用Alamofire. 而且我不需要刷新令牌,因为移动应用程序无法获取它们。

guard let url = URL(string: "https://www.reddit.com/api/v1/access_token") else { return }
            let uuid = UUID().uuidString
            let params: Parameters = [
                "grant_type" : "https://oauth.reddit.com/grants/installed_client",
                "device_id" : "\(uuid)"]


            let username = "MY_CLIENT_ID"
            let password = ""
            let loginString = String(format: "%@:%@", username, password)
            let loginData = loginString.data(using: String.Encoding.utf8)! as NSData
            let base64EncodedString = loginData.base64EncodedString()

            let headers = ["Content-Type" : "application/x-www-form-urlencoded",
                           "Authorization" : "Basic \(base64EncodedString)"]

            Alamofire.request(url, method: .post , parameters: params, encoding: URLEncoding.httpBody, headers: headers).responseJSON { (response) in

                UserDefaults.standard.set(uuid, forKey: "userID")
                UserDefaults.standard.synchronize()
                if let JSON = response.result.value as? [String:Any] {
                    guard let accessToken = JSON["access_token"] as? String else { return }
                    KeychainWrapper.standard.set(accessToken, forKey: "oauthToken")
                }

标签: iosswiftoauthalamofireaccess-token

解决方案


Easiest way is to check if token is valid when doing api call and authenticate it again if it is about to expire. You can decode token using JWTDecode library. -> JWTDecode

You can debug print Your token and try to see what informations You get inside using this website https://jwt.io


推荐阅读