Moya - 无法使用身份验证凭据调用apis

问题描述 投票:0回答:2

我正在使用django rest框架为apis开发一个iOS应用程序。但是目前我在使用身份验证凭据调用apis时无法取得进展。

我成功地使用Postman调用api并通过将Header设置为Authentication Bearer <token>来卷曲..但我一直未能通过iOS应用程序调用它。我正在使用Moya来呼叫api。我不知道下一步该做什么。

我尝试了什么:(当打电话给莫亚时)

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和其他东西..?给我一些建议!

ios swift authentication networking moya
2个回答
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


0
投票

尝试了几个小时之后......我发现api端点是基于内容语言重定向的。所以我设置的标题在重定向时已经死了。因此,提前设置i18n网址或设置内容语言标题可以解决我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.