谈谈客户端对于Token过期的处理
在当前的开发中,大多数情况下,用户登陆成功之后,会有服务端下发一个Token作为用户的身份证明,其中包含了用户的部分个人信息,在以后的请求过程中,需要将该Token作为参数或者放在header里面发送给服务器作为身份验证的一个步骤,而这个时候,就会存在一个让开发者很头疼的问题,Token失效!
这边我们先抛开不谈Token的加密等问题,以及服务端如何保存Token以及有效期等问题,我们只考虑一个问题,我客户端某一个请求返回Token过期(失效),我该如何处理才能显的比较妥当?
这边我假设两种情况:
1、app必须登陆才能使用
2、app即使没有登陆部分功能也可以使用
app必须要登陆才能使用
这里写代码片该种情况并没有太多的选择余地,所有的接口必须依赖Token才能使用,这时候能做的就是弹出登陆界面,让用户登陆。问题是,用户登陆成功之后的刷新问题。
1、在某些(基本上是大多数,特别是没有自带下拉刷新的界面),在will appear里面做网络请求
2、通知。大多数情况下,我们会有一个baseVC的存在,定义一个“是否需要刷新”的变量,当用户登陆成功之后,发送一个登陆成功的通知,并在需要刷新的界面重新做请求
3、建立一个专门管理Token过期API的类,在检测Token过期的情况后,劫持该API,登陆成功之后,重新发送该请求
app即使没有登陆部分功能也可以使用
这边涉及到一个问题就是,当Token过期弹出登陆界面之后,用户是可以取消登陆的,这时候如果在will appear里面做网络请求的话,并且用户一直选择取消,就会导致死循环。
我这边的做法是:
1、取消通知。定制一个参数,用来判断用户在没有登陆的情况下,是否可以进入该界面,如果不能接入,逐一返回上一个界面(因为在检测Token过期并弹出登陆界面的时候,这时候本地的Token信息理论上是应该被清除掉的)
2、登陆成功通知。可以和上面必须登陆时候一样的做法
3、同以上必须登陆的情况
以上是我在开发中对于Token过期的特殊处理,如果有问题,希望不吝指出。