在每个请求之前重新加载凭据是一个好习惯吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在每个请求之前重新加载凭据是一个好习惯吗?相关的知识,希望对你有一定的参考价值。

我正在开发一个ios应用程序,它与laravel中的后端一起工作,这个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"
}
答案

我的回答是假设您的服务器验证令牌,并且您不依赖于应用程序来验证令牌。

有了这个假设,我认为这取决于令牌过期时你可以做什么。

如果您唯一能做的就是提示用户再次登录,那么我可能只是发出Web请求并处理401 Not Authorized。

但是,如果您能够以静默方式刷新用户的令牌,则可能需要在即将到期时抢先刷新令牌。

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

另一答案

每次用户打开应用程序时,我都会这样做,而不是每次通话。

其他选择:

  1. 你也可以给他们一个他们输入的代码,这个代码很长时间。
  2. 您可以在首次下载应用时登录。然后他们将永远登录。然后当令牌过期时,一个小弹出会说“Something Something Something”

以上是关于在每个请求之前重新加载凭据是一个好习惯吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用单个片段显示UI而不是活动是一种好习惯吗?

重新加载时刷新片段

创建多个线程来处理多个请求是一种好习惯吗?

登录后重新生成会话 ID 是一种好习惯吗?

为 useState() 钩子字符串化对象以避免重新渲染是一种好习惯吗

在android中动态创建选项卡并使用传入的参数加载片段