swift - 在每次请求之前重新加载凭据是一种好习惯吗?

标签 swift laravel jwt

我正在开发一个 iOS 应用程序,该应用程序与在 laravel 中制作的后端一起使用,此 api 通过 JSON 网络 token 管理登录和信息交换。 为了防止用户访问带有过期 token 的网络路由,我在每次网络调用之前检查用户的凭据。 我的问题是,这是一个好习惯吗?因为当我开始考虑它时,用户访问我的服务器的次数是原来的两倍。

例如,这是访问他们信息的函数。

    /// 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()
                        }

                    }
                }

            })
        }
    }

检查凭据函数询问服务器用户的 token 是否仍然有效,如果有效则返回

{
    "Status": "Success"
}

最佳答案

我的回答假设您的服务器验证 token ,并且您不依赖应用来验证 token 。

根据这个假设,我认为这取决于 token 过期后您可以做什么。

如果您唯一能做的就是提示用户再次登录,那么我可能只会发出网络请求并处理 401 未授权。

但是,如果您能够静默刷新用户的 token ,您可能希望在 token 即将过期时抢先刷新 token 。

在我的应用程序中,在每次网络请求之前,应用程序都会检查用户的访问 token 是否会在接下来的 3 分钟内过期,如果是,则在发出请求之前尝试刷新它。如果刷新成功,将使用新的访问 token 发出 Web 请求。如果刷新失败,则不会发出 Web 请求,应用会提示用户登录。如果出于任何原因,Web 请求在 401 之后仍然失败,应用会提示用户登录。

关于swift - 在每次请求之前重新加载凭据是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938220/

相关文章:

php - PHP如何增加jwt过期时间

ios - Swift 最后一个对象等效项

swift - 为什么整个模块优化不能推断同一模块中公共(public)非重写模块类/方法的最终结果?

php - Laravel 如何设置帖子路由 ID?

php - 如何排除特定域的 CSRF token ?

javascript - JSON Web token (JWT) - 验证客户端

ios - 附加PathComponent后路径不同(_ :)

swift - 从 swift 的名称中获取属性的类型/类

laravel - 使用 Laravel Notification 进行邮箱验证

c# - JWT TOKEN 生成 Client_Assertion