最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • iOS端解码base64加密数据 时失败(含解决办法)

    正文概述 掘金(前端_卡卡西)   2021-08-06   998

    这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战

    之前遇到个问题,是 IOS 用户base64解码失败。

    问题描述:

    用户淘宝授权,淘宝给的授权信息经后端 base64 加密之后拼在url中返回给前端,前端通过url取值,然后使用base64解码获取数据,进而绑定商品。但是有且仅有一个用户,账号一直绑定不上,其他用户均没问题。

    前端使用vue开发,核心代码如下:

    import { Base64 } from 'js-base64';
    
    ...
    created() {
        const code = this.$route.query.code;
        
        if (res) {
            try {
                this.code = JSON.parse(Base64.decode(code));
            }
        }
    
    }
    ...
    

    因为问题用户仅有一例,本身并没有怀疑是代码的问题,猜测跟该用户授权相关,后经过大量埋点数据 及 抓包测试,发现是:

    返回的加密码,在前端 this.$route.query 获取时,base64加密时尾部补全的“=”没有取全,导致decode时失败,解密为空值。

    参考: iOS base64解码问题记录

    解决办法:

    后端base64 加密之后,再 encodeURI 一下,前端取值时,先 decodeURI,再进行base64解码及 JSON.parse反序列化,核心代码如下:

    import { Base64 } from 'js-base64';
    
    ...
    created() {
        const code = this.$route.query.code;
        
        if (res) {
            try {
                let decodeUrl = decodeURI(code); // decodeURI 可避免丢失及转译
                this.code = JSON.parse(Base64.decode(decodeUrl));
            }
        }
    
    }
    

    注:这种url传值在安卓和ios都会失败

    总结: 因为只有一个用户出问题,其他人均正常,一开始也没往代码问题上想。神策埋点上报因长度限制,上报数据没添加完全,只看到能获取url中的加密码,开始也没留意是丢值了,最后后端同事提示,才想到这种可能,得以优化。最开始一直以为是用户授权问题,返回的授权信息有什么特殊性导致失败,尴尬的是,后来该用户又申请了一个账号,结果还是授权不成功,才意识到不是偶发性。害,bug还有很多,唯有努力学习啊!


    起源地下载网 » iOS端解码base64加密数据 时失败(含解决办法)

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元