【问题标题】:403 Authentication credentials not provided on request with Alamofire403 未根据 Alamofire 请求提供身份验证凭据
【发布时间】:2017-03-06 12:48:28
【问题描述】:

我在使用 Alamofire 的获取请求时收到 403。我从服务器收到的错误消息是:未提供身份验证凭据。 一直在关注请求中缺少身份验证标头的问题。我确定我在身份验证标头中发送了我的访问令牌。 WireShark 显示请求是使用 auth 标头发出的。所以我不知道如何解决这个问题。这是代码sn-p:

 var authenticatedJsonHeaders: [String: String] {
        get {
            return [
                "Content-Type": "application/json",
                "Accept": "application/json",
                "Authorization": "\(accessTokenAuthType.rawValue) \(accessTokenString)"
            ]
        }
    }

.....

return Alamofire.request(urlString, method:method, parameters: nil, encoding: encoding, headers: authenticatedJsonHeaders)
        .response { response in

            let currentUserId = ApplicationState.sharedInstance.currentUserManager.getCurrentUserProfileId()

            if(currentUserId == 0){ //if current user exists, do not sign the user out!
                print("bye user..")
                self.signOutUnauthorizedUser(response.response?.statusCode, urlOrSuffix: urlString)
            }

            self.checkResponseForSharevilleAlertMessage(response.response)

            if !hasResponseObject {
                if /*
let response = response,*/ (response.response?.statusCode)! < 400 && response.error == nil {
                    print("success for statuscode: \(response.response?.statusCode) url: \(urlString)")
                    success(nil)
                } else {
                    sendApiErrorWithUrlIfStatusCodeIsNot204(self.getUrlFromSuffix(urlString), statusCode: response.response?.statusCode)
                    print("fail for statuscode: \(response.response?.statusCode ?? nil) url: \(self.getUrlFromSuffix(urlString))")
                    print("request header")
                    print(response.request ?? "none"
                    failure(response.error)
                }
            }
        }
        .responseJSON { data in
            if hasResponseObject {
                if let value = data.result.value, data.response != nil && data.response!.statusCode < 400 && data.result.error == nil {
                    print("success for statuscode: \(data.response!.statusCode) url: \(urlString)")
                    success(value as AnyObject?)
                } else {
                    sendApiErrorWithUrlIfStatusCodeIsNot204(urlString, statusCode: data.response?.statusCode)
                    print("fail for statuscode: \(data.response?.statusCode) url: \(urlString)")
                    failure(data.result.error)
                }
            }
        }

【问题讨论】:

标签: ios swift authentication alamofire


【解决方案1】:

我觉得你应该试试

.validate()

。在 request() 和 response() 之间。在你的 alamofire 请求调用中

Alamofire.request(urlString, method:method, parameters: nil, encoding: encoding, headers: authenticatedJsonHeaders)
        .validate().response {  //   }

【讨论】:

    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 2018-11-28
    • 2020-07-22
    • 2021-11-29
    • 2019-04-26
    • 2020-01-11
    • 2019-07-29
    • 2019-06-11
    相关资源
    最近更新 更多