Alamofire POST 授权

Alamofire POST with Authorization

我在 ios 中使用 swift 的一个请求 POST 遇到问题 ...

在 curl 中,我发送了一个这样的请求:

curl -H "Authorization: token ce2800d53d520b4a73a005a611d53d299e0c1d5e"....

我的服务器响应为 200

然而 ios 我提出这样的要求:

let parameters = [
    "date_of_birth": strDate!,
    "address": strPlace!,
]

let parametersH = [
    "Authorization": "token 9640e65f66429415fb9359739ed8bc3f57cb0566"
]


Alamofire.request(Alamofire.Method.POST, "http://192.168.1.70:8000/profileMe/", parameters: parameters,headers:parametersH).progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
    }.responseJSON{ request, response, JSON, error in

        if (error == nil) {
            println(response)
        }
        else{
            println(error)
        }

    }

我的服务器发送一个 403....

如何让我请求一个有效的身份验证?....

我不知道...因为 header 不正确...当我发送请求时...

当我发送此请求时 android 我没有问题......并且请求类似......

我认为授权 header 区分大小写。 所以,token应该是Token.

let parametersH = [
    "Authorization": "Token 9640e65f66429415fb9359739ed8bc3f57cb0566"
]

我运行遇到了同样的问题,调试了一整天,终于弄明白了。我几乎可以肯定 OP 使用的是 Django。

Alamofire 或底层 Swift/Objective C 网络代码的微妙之处。我认为如果 Alamofire 在响应 header 中收到 Set-Cookie,它将在后续请求 header 中将此信息作为 Cookie 负载发送。这与其他 HTTP 网络库的行为不同。

因为它与 Django 相关,Alamofire 将在后续请求中发送 sessionid cookie 值,这让 Django 认为 session 已经启动,然后你还没有提供使用 SessionAuthentication 时正确的 CSRF 令牌,它会抛出 403 权限错误。这就是为什么你第一次可以成功执行请求,然后第二次抛出 403。

要解决这个问题,通常要阻止 Alamofire 自动发送 cookie 值,设置

let headers = [
    "Cookie": ""
]