How to pass access token to Alamofire?

前端 未结 4 440
南旧
南旧 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:52

    Did you tried this, it's available in Alamofire documentation:

    let headers: HTTPHeaders = [
        "Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
        "Accept": "application/json"
    ]
    
    Alamofire.request("https://httpbin.org/headers", headers: headers).responseJSON { response in
        debugPrint(response)
    }
    

    Another example is:

    let user = "user"
    let password = "password"
    
    var headers: HTTPHeaders = [:]
    
    if let authorizationHeader = Request.authorizationHeader(user: user, password: password) {
        headers[authorizationHeader.key] = authorizationHeader.value
    }
    
    Alamofire.request("https://httpbin.org/basic-auth/user/password", headers: headers)
        .responseJSON { response in
            debugPrint(response)
        }
    

    One more way is:

    let user = "user"
    let password = "password"
    
    let credential = URLCredential(user: user, password: password, persistence: .forSession)
    
    Alamofire.request("https://httpbin.org/basic-auth/\(user)/\(password)")
        .authenticate(usingCredential: credential)
        .responseJSON { response in
            debugPrint(response)
        }
    
    0 讨论(0)
  • 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)
            }
        }
    
    0 讨论(0)
  • 2020-12-28 19:55

    It can be done by using Alamofire in following way:

        let url: String = "https:url......."
        var request = URLRequest(url:  NSURL(string: url)! as URL)
    
        // Your request method type Get or post etc according to your requirement
        request.httpMethod = "POST"
    
        request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    
        // Your required parameter in case of Post request
        let parameters: [String: Any] = ["paramter1": "vaue1"]
    
        request.httpBody = try! JSONSerialization.data(withJSONObject: parameters )
    
        Alamofire.request(request).responseJSON { (responseObject) -> Void in
    
          // Your required functionality here            
    
        }
    
    0 讨论(0)
  • 2020-12-28 20:02

    I'm using look like this :-

    let username = "Tuser"
    let password = "Tpassword"
    let credentialData = "\(username):\(password)".data(using: String.Encoding.utf8)!
    let base64Credentials = credentialData.base64EncodedString(options: [])
    let headers = ["Authorization": "Basic \(base64Credentials)"]
    

    OR

    let headers    = [ "Authorization" : token ]
    
    0 讨论(0)
提交回复
热议问题