Jay*_*ngh 2 token access-token ios swift
收到令牌后,当令牌结束时,如何在登录后自动调用令牌?在同一页面上
Alamofire.request(urlString, method: .post, parameters: newPost, encoding: JSONEncoding.default)
.responseJSON { response in
if let json = response.result.value as? [String : Any]{
print("JSON: \(json)")
if UserDefaults.standard.bool(forKey: "logged_in") {
Token = json["Token"]! as! String
UserDefaults.standard.set(Token, forKey: "Token")
UserDefaults.standard.synchronize()
}
} else {
print("Did not receive json")
}
//expectation.fulfill()
}
Run Code Online (Sandbox Code Playgroud)
对于Authorisation Token,理想的做法是从服务器端他们需要检查,请求的API调用TOKEN是否有效.如果令牌未匹配或过期,他们将提供HTTP status code 401,从移动方面,您需要首先检查状态代码,如果您发现401需要强制注销或重新登录,需要一个新令牌,您可以将其保存在您的UserDefaults.
小智 5
场景 1:您需要告诉制作您的 Web 服务的后端开发人员,他需要检查 TOKEN 是否有效。如果令牌已过期,他需要提供消息代码或“令牌已过期”消息,如果消息代码已过期,您可以在响应中检查,而不需要导航登录屏幕。\n这是最佳实践。
\n\n场景 2:如果您不想从应用程序注销,并让应用程序使用新令牌自动刷新,请告诉 Web 服务开发人员,每当令牌过期时,他都会在响应字段中返回新令牌作为“授权”,并且从您的代码方面,您需要检查每个请求中的授权是否包含新令牌。如果包含,则意味着您需要在用户默认中用新令牌替换旧令牌。
\n\n下面是我在 Swift3 中的代码:
\n\nfunc requestApiCall(_ urlString: String, paramData: NSObject, completionHandler: @escaping (NSDictionary?, NSError?) -> ()) {\n let token = UserDefaults.standard.object(forKey: \xe2\x80\x9ctoken\xe2\x80\x9d as String)\n var headersVal = [\n "Authorization": "Bearer "+(token as String),\n ] \n Alamofire.request(urlString, method: .post, parameters: paramData as? [String : AnyObject],encoding: JSONEncoding.default, headers: headersVal)\n\n .responseJSON { response in\n if let authorization = response.response?.allHeaderFields["Authorization"] as? String {\n\n var newToken : String = authorization\n UserDefaults.standard.set(newToken, forKey: "token")\n UserDefaults.standard.synchronize()\n }\n\n switch response.result {\n\n case .success(let value):\n\n if let res = response.result.value {\n let response = res as! NSDictionary\n let message = response.object(forKey: "message")!\n print(message)\n if message as! String == "Token has been expired" \n {\n self.showLoginScreen()\n }\n }\n completionHandler(value as? NSDictionary, nil)\n\n case .failure(let error):\n if error._code == -1001 {\n print("timeout")\n }\n completionHandler(nil, nil)\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4206 次 |
| 最近记录: |