How to pass access token to Alamofire?

前端 未结 4 445
南旧
南旧 2020-12-28 19:19

I am trying to pass access token in Alamofire but getting confuse in various methods around web.

Below are methods which we need to use.



        
4条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-28 19:53

    If you are using Alamofire 4.0 or greater, you can use RequestAdapter protocol to intercept the request and inject the JWT token. This solution is perfect if you make many requests and have to use JWT in each of them.

    class AccessTokenAdapter: RequestAdapter {
        private let accessToken: String
        private let prefix: String
    
        public init(accessToken: String, prefix: String) {
            self.accessToken = accessToken
            self.prefix = prefix
        }
    
        public func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
            var urlRequest = urlRequest
    
            if let urlString = urlRequest.url?.absoluteString, urlString.hasPrefix(prefix) {
                urlRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
            }
    
            return urlRequest
        }
    }
    

    Somewhere in the class you initialize the SessionManager like this:

    var sessionManager = SessionManager()
    sessionManager.adapter = AccessTokenAdapter(accessToken: token, prefix: "https://protected.api.com")
    

    And you use it whenever you want to:

    sessionManager.request(MyRouter.getCustomData()).responseArray { (response: DataResponse<[CustomData]>) in
    
            if response.result.isSuccess {
                self.array = response.result.value ?? []
            } else {
                print(response.debugDescription)
            }
        }
    

提交回复
热议问题