Ken*_*y H 5 xcode json keychain swift alamofire
我已经成功获得了令牌的钥匙串并将其传递给下面显示的AccessTokenAdapter类.http127.0.0.1:8000/api2/projects /?format = json作为projectsURL传递.
class AccessTokenAdapter: RequestAdapter {
private let accessToken: String
init(accessToken: String) {
self.accessToken = accessToken
}
func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
var urlRequest = urlRequest
// print("JWT \(accessToken)")
urlRequest.setValue("JWT \(accessToken)", forHTTPHeaderField: "Authorization")
return urlRequest
}
}
let sessionManager = SessionManager()
sessionManager.adapter = AccessTokenAdapter(accessToken: self.keychain["token"]!)
sessionManager.request(self.projectsURL, method: .get, encoding: JSONEncoding.default).responseJSON{ response in
switch response.result {
case .success:
print("yey I made it")
case .failure(let error):
print(error)
}
}
Run Code Online (Sandbox Code Playgroud)
但是,从打印(错误),我的Xcode显示错误,如错误域= NSURLErrorDomain代码= -999"取消"UserInfo = {NSErrorFailingURLKey = http://127.0.0.1:8000/api2/projects/?format=json,NSLocalizedDescription =取消,NSErrorFailingURLStringKey = http127.0.0.1:8000/api2/projects /?format = json}
有任何想法吗?
Alamofire 4.0
Keychain
Xcode 8.1
Swift3
使用JWT进行身份验证
使用Postman with header,key ="Authentication",value ="JWT(此处生成的令牌)"工作正常
Vit*_*lii 11
当你使sessionManager成为一个常量时,它不会比拥抱它的功能更长寿,因此一旦管理器被释放,会话就会结束.
要解决此问题,请将sessionManager保持更长时间.例如,在我的情况下,我使它成为一个类属性:
class NetworkRequest: {
var sessionManager = Alamofire.SessionManager()
...
func performRequest(_ call: APICall, customLink: String = "", parameters: Dictionary<String, Any> = ["":"" as Any]) {
let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = call.suggestedTimeout()
sessionConfig.timeoutIntervalForResource = call.suggestedTimeout()
sessionManager = Alamofire.SessionManager(configuration: sessionConfig)
sessionManager.adapter = AccessTokenAdapter()
sessionManager.request(urlString,
method: call.method(),
parameters: parameters,
encoding: call.chooseEncoding(),
headers: [:])
.responseJSON
{ response in
...
}
Run Code Online (Sandbox Code Playgroud)
}
根据您的具体情况,解决方案可能会有所不同,但其目的是让sessionManager保持活动状态,直到网络请求结束.
刚刚解决了 看来需要提前设置httpmethod。
let url = URL(string: "http://127.0.0.1:8000/api2/projects/?format=json")
var urlRequest = URLRequest(url:url!)
urlRequest.httpMethod = HTTPMethod.get.rawValue
urlRequest.addValue("JWT \(self.keychain["token"]!)", forHTTPHeaderField: "Authorization")
urlRequest.addValue("application/json", forHTTPHeaderField: "Accept")
Alamofire.request(urlRequest)
.responseJSON { response in
debugPrint(response)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7897 次 |
| 最近记录: |