Alamofire V3 如何使凭证无效

Posted

技术标签:

【中文标题】Alamofire V3 如何使凭证无效【英文标题】:Alamofire V3 how to invalidate credential 【发布时间】:2016-01-13 08:27:31 【问题描述】:

我在 ios 9 中使用 Alamofire V3,我正在做一个简单的请求,如 README 中所述

Alamofire.request(.GET, WS_URL)
     .authenticate(user: user, password: password)                       
     .validate(statusCode: 200..<300)
     .responseJSON  response in
         ...

在第一次有效请求后,我用无效的凭据更改了凭据,请求成功,但它应该失败。

如何使以前的凭据无效?

UPDATE

我找到了一个可能的解决方案,但我不确定它是不是最好的。

    let plainString = "\(user):\(password)
    let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding)
    let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
    let headers = ["Authorization": "Basic " + base64String!]
         Alamofire.request(.GET, urlRequest, headers:  headers)
        .authenticate(usingCredential: self.credential)
        .responseJSON responseJson in
            ...
            

谢谢

【问题讨论】:

你是怎么解决的? 如我的评论中所写。更多解释请阅读:github.com/Alamofire/Alamofire#http-basic-authentication:根据您的服务器实现,授权标头也可能是合适的 【参考方案1】:

如documentation中所写

根据您的服务器实现,授权标头也可能是合适的

【讨论】:

【参考方案2】:

假设您的端点没问题,并且您得到了成功的响应...

let 定义了一个一旦设置就不能修改的常量。

var 定义了一个可以的变量。

尝试使用一个变量,如果你已经分配它编译然后重新编译。否则为您的变量使用不同的名称。

print他们看看他们的价值观。

【讨论】:

这是一个示例代码。问题不在于声明为 let 或 var 的变量。真正的代码从 uitextfields 中读取值。 顺便说一句,我已经编辑了删除用户名和密码的代码以避免混淆【参考方案3】:

在这些情况下,“重置”命令是你最好的朋友:

 $ git reset --soft HEAD~1

重置会将您当前的 HEAD 分支倒回到指定的修订版。

注意 --soft 标志:这可确保保留未完成修订中的更改。运行命令后,您会在工作副本中发现更改为未提交的本地修改。

如果您不想保留这些更改,只需使用 --hard 标志。 确保仅在您确定不再需要这些更改时才执行此操作。

$ git reset --hard HEAD~1

【讨论】:

以上是关于Alamofire V3 如何使凭证无效的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 项目中添加 Alamofire

如何使用 Alamofire 同时传递 queryStrings 和 JSON Body

模块“Alamofire”没有名为“upload”的成员

如何将凭证传递给 Translation API v3?

SwiftyDropbox 与 Alamofire 问题

iOS/IBM Cloud/Swift:使用 AlamoFire 发布到 Watson API