微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

刷新 Bearer Token 并恢复当前 API

如何解决刷新 Bearer Token 并恢复当前 API

如果我的不记名令牌因 http 代码 401 过期,我需要恢复我的 WebService, 下面是我的代码

  • 当发生 401 错误时,这意味着访问令牌已过期,我需要将刷新令牌发送到我的服务器以获取新的访问令牌。
  • 获得新的访问令牌后,我需要重做之前收到 401 错误的请求。

假设我点击了 webservice1 并且它给出了 401 http 代码,那么新的承载令牌请求将生成并且相同的 API 恢复工作。我该怎么做?

import UIKit
import CryptoKit


class SharedWebService: NSObject {
    static let sharedApiInstance = SharedWebService()
    func generalApiMethod (parameter : NSDictionary,completion: @escaping ((NSMutableArray?) -> Void))
    {
        var dashboarddata : NSMutableArray = NSMutableArray()
        let urlString = String(format:"URL OF API HERE")
        let url = URL(string: urlString)
        guard let requestUrl = url else { fatalError() }
        var request = URLRequest(url: requestUrl)
        request.timeoutInterval = 60
      
        let bearerToken = "current bearer token"
        request.setValue(bearerToken,forHTTPHeaderField: "Authorization")
        request.httpMethod = "GET"
        request.setValue("application/json",forHTTPHeaderField: "Accept")
        URLSession.shared.dataTask(with: request) {
            (data,response,error) in
            if let httpResponse = response as? HTTPURLResponse {
                   print(httpResponse.statusCode)
                if httpResponse.statusCode == 401
                {
                   // Refresh bearerToken get here
                   let bearerToken = self.getBearerTokenDevice() //fetch api to get new bearer token 
                    return
                }
               }
            guard error == nil else {
                print(error!.localizedDescription);
                dispatchQueue.main.async{
                    completion(dashboarddata)
                }
                return
            }
            guard let jsonData = data else { print("Empty data"); return }
            if String(data: jsonData,encoding:  String.Encoding.utf8) != nil
            {
               
                do {
                    let responseJSON = try? JSONSerialization.jsonObject(with: jsonData,options: [])
                    if let responseJSON = responseJSON as? [String: Any] {
                      
                       //Success case do here reponse return
                        completion(dashboarddata)

                    }
                }
                
                
            }
        }.resume()
    }
    
    
    func getBearerTokenDevice()-> String
    {
        //how to handle it
        
        return "New bearer token from api fetch"
    }
    
    
    
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?