带有授权承载令牌和其他标头的Alamofire请求

时间:2020-04-08 04:53:06

标签: swift authorization alamofire

我的API包括授权承载令牌和另外三个标头。我的问题是我没有正确发送载体令牌(邮递员返回正确的数据,而不是我的模拟器)。我看到了很多使用request adapter的示例,但是我不能使用它吗?谢谢!

auth实际上位于授权选项卡中,而不位于标题中。

enter image description here

**已更新: 通过遵循文档解决了该问题。 HTTP Headers

这是带有工作代码的Alamofire函数:

 func getBetsData(completion: ((Bool) -> ())? = nil) {

        guard let token = defaults.string(forKey: "token") else {
            return
        }

        let headers: HTTPHeaders = [
        .authorization(bearerToken: token),
        .init(name: "bet_type", value: type),
        .init(name: "bet_status", value: status),
        .init(name: "page", value: String(page))
    ]

        AF.request("https://example.com", headers: headers).responseDecodable(of: Bets.self) { response in
            switch response.result {
            case .success:
                if let data = response.data {

                    do {
                        let bets = try JSONDecoder().decode(Bets.self, from: data)
                        print("message: \(bets.message)")                      

                        self.setupTableData()
                        completion?(true)
                    } catch {
                        print("Error: \(error)")
                        completion?(false)
                    }
                }
            case.failure(let error):
                print(error)
                completion?(false)
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

您可以直接添加标题:

<iframe>

此外,如果您要从响应中解码let headers: HTTPHeaders = [.authorization(bearerToken: token)] 值,则不应使用Decodable,因为那样会使用responseJSON来解码Data,然后您只需再次解析它。相反,您应该使用JSONSerialization

responseDecodable

这将更加高效,并且会自动为您捕获错误。

答案 1 :(得分:0)

正如Dilan提到的那样,仅令牌是不够的,您将需要在相同的Header参数中进行承载。

这是处理您在应用程序中发送到服务器的所有请求中的令牌请求和检索器的最佳方法之一

https://www.avanderlee.com/swift/authentication-alamofire-request-adapter/

通过这种方式,您不需要在所有Web服务中手动处理令牌。