我正在使用一个与laravel制作的后端配合使用的iOS应用程序,这个api通过JSON Web令牌管理登录和信息交换。 为了防止用户访问带有过期令牌的Web路由,我会在每次Web调用之前检查用户的凭据。 我的问题是,这是一个好习惯吗?因为当我开始考虑它时,用户访问我的服务器的次数是两倍。
例如,这是访问他们信息的功能。
/// Get user's info form the database
///
/// - Parameter completed: Completition Block
func getInfo(completed: @escaping DownloadComplete){
let token = self.getToken()
print(self.getError())
if(token != nil && token != ""){
//Here is where I check credentials.
self.checkCredentials(completed: {
let url = "\(Base_URL)\(myInfo)\(self.getToken() ?? "")"
Alamofire.request(url, method: HTTPMethod.get).responseJSON { respone in
if let result = respone.result.value as? Dictionary<String, AnyObject>{
if let user = result["User"] as? Dictionary<String, AnyObject>{
var Info = Alumno()
if let id = user["id"] as? Int64!{
Info.id = id
}
...
self.userInfo = Info
completed()
}
}
}
})
}
}
检查凭证功能询问服务器用户的令牌是否仍然有效,如果是,则返回
{
"Status": "Success"
}
答案 0 :(得分:1)
每次用户打开应用程序时,我都会这样做,而不是每次通话。
其他选择:
你也可以给他们一个他们输入的代码,这个代码很长时间。
您可以在首次下载应用时登录。然后他们将永远登录。然后当令牌过期时,一个小弹出会说“Something Something Something”
答案 1 :(得分:1)
我的回答是假设您的服务器验证令牌,而您并不依赖该应用来验证令牌。
根据这个假设,我认为这取决于如果令牌过期你可以做什么。
如果您唯一能做的就是提示用户再次登录,那么我可能只是发出网络请求并处理401 Not Authorized。
但是,如果您能够以静默方式刷新用户的令牌,则可能需要在即将到期时抢先刷新令牌。
在我的应用程序中,在每个Web请求之前,应用程序检查用户的访问令牌是否将在接下来的3分钟内到期,如果是,则尝试在发出请求之前刷新它。如果刷新成功,则使用新访问令牌发出Web请求。如果刷新失败,则不会发出Web请求,应用程序会提示用户登录。如果由于任何原因,Web请求在401之后仍然失败,则应用程序会提示用户登录。