ios - 每小时运行一次 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")
}
解决方案
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
推荐阅读
- mini-css-extract-plugin - 如何让 mini-css-extract-plugin 与 webpack 5 一起工作?
- css - svg 路径在旋转时从其正常位置移动
- fortran - 为什么 OpenACC 帮派级循环不起作用
- angular - 如何在 TypeScript 中引用 FormControl?
- python - 我正在构建一个人脸检测器,但我在调整捕获帧的大小以匹配模型的大小时遇到了挑战,因此出现以下错误
- python - TFGPT2LMHeadModel 未知位置
- python - 如何列出所有 pytest 设备
- java - 无法使用 Talend 上传到 Snowflake 阶段,NoSuchMethodError
- c# - 鼠标单击“OnTriggerStay”以添加分数,添加超过设定的数量
- python-3.x - 在双 with 语句中使用 psycopg2 执行多个 SQL 查询