iOS - Alamofire v2 基本身份验证不起作用
Posted
技术标签:
【中文标题】iOS - Alamofire v2 基本身份验证不起作用【英文标题】:iOS - Alamofire v2 Basic Auth not working 【发布时间】:2015-09-21 06:19:55 【问题描述】:所以我向 Bing Image Search 发送了一个基本的身份验证请求以获取一些图像数据,它工作得很好,直到我更新到我拥有的最新版本的 Alamofire (1.3 -> 2.0.2)这样做是因为 1.3 甚至无法与 XCode 7 兼容。
无论如何,这是我的代码:
let credentials = ":\(Settings.bingApiKey)"
let plainText = credentials.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let base64 = plainText!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
manager = Alamofire.Manager.sharedInstance
manager!.session.configuration.HTTPAdditionalHeaders = [
"Authorization": "Basic \(base64)"
]
let url = NSURL(string: Settings.bingImageApi + "&Query=" + keyword + "&$top=15&$skip=" + String(skip))!
manager!
.request(.POST, url, parameters: nil, encoding: .JSON)
.responseJSON request, response, result in
...
我得到了错误:
失败:错误域=NSCocoaErrorDomain 代码=3840“字符 0 周围的值无效。” UserInfo=NSDebugDescription=字符 0 周围的值无效。 不支持您提供的授权类型。仅支持 Basic 和 OAuth
【问题讨论】:
【参考方案1】:我在从 Alamofire 1.x 迁移到 2.x 时遇到了同样的问题。
我发现的一种解决方法(并且有效)是在执行请求时传递标头:
let headers = ["Authorization": "Basic \(base64)"]
Alamofire.request(.POST, url, parameters: nil, encoding: .JSON, headers: headers)
有关更多信息,您可以查看documentation。
【讨论】:
感谢您的帮助!效果很好【参考方案2】:请阅读这里http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ “应用程序传输安全 (ATS) 允许应用程序在其 Info.plist 文件中添加一个声明,该文件指定它需要与其进行安全通信的域。ATS 可防止意外泄露,提供安全的默认行为,并且易于采用。您应该采用 ATS尽快,无论您是创建新应用还是更新现有应用。”
【讨论】:
【参考方案3】:错误的第一部分是由于您在响应中没有收到有效的 JSON。您可以使用response
、responseData
或responseString
来帮助调试。
错误的第二部分是由于您设置标题的方式。创建会话配置后,您无法设置 Authorization
标头。您可以创建自己的会话配置和自己的Manager
,也可以在request
中传递Authorization
标头。
【讨论】:
以上是关于iOS - Alamofire v2 基本身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 swift 5 中使用 alamofire 对登录到我的 iOS 应用程序的用户进行身份验证?