我已经成功获得了令牌的钥匙串并将其传递给下面显示的AccessTokenAdapter类.
http127.0.0.1:8000 / api2 / projects /?format = json作为projectsURL传递.
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) } }
但是,从打印(错误),我的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
钥匙扣
Xcode 8.1
Swift3
使用JWT进行身份验证
使用Postman with header,key =“Authentication”,value =“JWT(此处生成的令牌)”工作正常
解决方法
当你使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 ... }
}
根据您的具体情况,解决方案可能会有所不同,但其目的是让sessionManager保持活动状态,直到网络请求结束.