Moya - 无法使用身份验证凭据调用 api
Posted
技术标签:
【中文标题】Moya - 无法使用身份验证凭据调用 api【英文标题】:Moya - unable to call apis with authentication credentials 【发布时间】:2017-09-22 02:54:53 【问题描述】:我正在使用 django rest 框架为 api 开发一个 ios 应用程序。但目前我无法在使用身份验证凭据调用 api 时取得成功。
我通过将 Header 设置为 Authentication Bearer <token>
.. 成功地使用 Postman 和 curl 调用了 api,但我一直无法从 iOS 应用程序调用它。我正在使用 Moya
调用 api。而且我不知道下一步该怎么做。
我尝试了什么:(调用 Moya 时)
let token = "abcde12345sometoken"
let plugin = AccessTokenPlugin(tokenClosure: token)
let provider = MoyaProvider<AccountAPI>(plugins : [plugin])
provider.request(.getAccountProfile(oauth_id: oauth_id, provider: "facebook")) (result) in
// doing something with result
并将 API 配置为:
extension AccountAPI : TargetType, AccessTokenAuthorizable
// codes conforming variables to TargetType protocol
public var authorizationType: AuthorizationType
switch self
case .getFacebookAccountToken:
return .none
default:
return .bearer
public var headers: [String: String]?
switch self
case .getFacebookAccountToken, .getEmailAccountToken: // post requests
return ["Content-type":"application/x-www-form-urlencoded"]
default:
return ["Content-type":"application/json"]
在使用 Moya 进行身份验证或使用 Info.plist 等时我应该考虑什么? 或者文件说这种方法适用于 JWT 令牌,也许我的方法不适用于 JWT 和其他东西..?给我一些建议!
【问题讨论】:
您的标头变量是什么样的?它真的会覆盖标题吗? 我编辑了添加标头变量的问题,我认为我应该在需要时添加 Accept-Language 标头。有什么建议吗? 这很奇怪。所以你的 API 中的标头不会覆盖你的插件? 不,我没有覆盖插件。。我认为是api服务器的问题,它在没有语言代码uri的情况下重定向请求,并且在此过程中可能会出现一些错误 【参考方案1】:就我而言,我使用
Moya
12.0.1
MultiTarget
示例:
plugins = [AccessTokenPlugin(tokenClosure:
let token = ...
return token
)]
MoyaProvider<MultiTarget>(
plugins: plugins
)
.request(MultiTarget(myAPI))
...
但它从不调用 tokenClosure
解决方案 你需要添加这个扩展
extension MultiTarget: AccessTokenAuthorizable
public var authorizationType: AuthorizationType
guard let target = target as? AccessTokenAuthorizable else return .none
return target.authorizationType
来源:https://github.com/Moya/Moya/blob/master/Sources/Moya/Plugins/AccessTokenPlugin.swift#L62
【讨论】:
【参考方案2】:经过几个小时的尝试,我发现它是 api 端点根据内容语言重定向自身。所以我设置的标头在重定向时已失效。所以无论是提前设置 i18n url 还是设置 content-language 标头都可以解决我的问题。
【讨论】:
以上是关于Moya - 无法使用身份验证凭据调用 api的主要内容,如果未能解决你的问题,请参考以下文章
即使凭据为真,Spring Boot Security 也会在 API 调用上引发 401 身份验证错误
Google Analytics API - 通过身份验证后无法添加服务
错误域 = MCOErrorDomain 代码 = 5 “无法使用当前会话的凭据进行身份验证。”
如何将 Windows 身份验证凭据从客户端传递到 Web API 服务