在问一个问题:
描述:APP内有些界面用户不需要登录就可以使用,有些必须用户登录才能使用,目前做法是点击底部tab的时候,去判断是否存在保存的Token,如果没有,就到登录界面,有就请求数据(每个请求添加Token到Header中)渲染界面。
问题1:每个请求都去添加Token到请求头,感觉有点麻烦,有没有其他好的方式。
问题2:通过保存到SP中的Token去判断是否登录,不太合理,如果Token已过期,但是存在,这个时候还是进入了对应的界面,但是请求接口返回 401(也就是用户没有登录),所以是不是在每个接口中根据返回码去判断用户是否登录,如果返回401跳转登录页面,返回200就渲染页面。或者有没有更好的方法?
问题1:你在网络请求框架,统一添加请求头,这不就完事
问题2:当然是在网络请求框架,统一拦截错误的情况了,比如统拦截错误码,如果过期,就进入登录,或者做你需要做的事情。
重点是,你需要改造你的网络请求框架,去做上面2件事情。
那就统一所有的请求都带上token呗,反正也不会报错。
如果返回401,你可以直接调用后端提供的reflash token 接口啊。
如果是jwt的话,你直接按Base64解析就可以获取内容(获取内容不需要盐,校验要盐),至于你说的携带token,如果你使用okhttp框架,设置拦截器即可。
每个请求都去添加Token到请求头,感觉有点麻烦,有没有其他好的方式。为什么要每次设置呢?用脚趾头想想都知道,如果是你写请求框架你让用户每次都携带token吗?不是应该自动携带吗?
通过保存到SP中的Token去判断是否登录,不太合理,如果Token已过期。一般来说,一个token的有效期不长,可能2个小时,但是有一个对应的refresToken,有效期1个月。你的token过期了,可以通过refreshToken获取。你本地的token可以设置一个时长,如果超过了这个时长就去获取一下新的。就算过期了,后台也有结果返回的呀。
当你进入一个要登录的页面时去请求一下检查token就可以了。你看我们的前端,也是这么做的。
方法不唯一,主要是思想。如果你跟后台约定好,怎么来都行。