小程序登录wx.getUserInfo 与 wx.login方法

2020-04-01  本文已影响0人  AiLeimi

依稀记得小程序刚出来那会的轰动景象,回首再看,小程序现在已经发展到方方面面了,遍及生活,作为一个前端人员甚是欣慰!

废话不多说,直接上代码:

wxml:

<button id='login' open-type='getUserInfo' bindgetuserinfo="getUserInfo"></button>


js:


login: function (fn) {

    var that = this;

    wx.getUserInfo({//早先此方法可以直接调起用户授权弹窗,后来机制更改需要配合button open-type='getUserInfo'来调起授权

        success: res => {

            //拿到部分用户未加密数据

            that.globalData.loginsatus = true;

            var imgurl = encodeURIComponent(res.userInfo.avatarUrl),//传给后台,后台要求转码

                iv = res.iv,//加密算法的初始向量

                encryptedData = res.encryptedData;//完整用户信息的加密数据

            res.userInfo.avatarUrl = imgurl;

            that.globalData.userInfo = res.userInfo;//用户信息对象,不包含 openid 等敏感信息

            wx.setStorageSync('userInfo', res.userInfo);

            // 登录

            wx.login({

                success: res => {

                    if (res.code) {

                        //请求登陆接口

                        wx.request({

                            url: that.globalData.weachLoginApi,//调取后台解密登录接口

                            data: {

                                code: res.code,//获取到的用户登录凭证

                                encryptedData: encryptedData,//getUserInfo拿到的加密串

                                iv: iv,//加密算法的初始向量

                                user: JSON.stringify(that.globalData.userInfo),//用户信息对象,

                                softName: "duiduinongzhuang"//后台定义的登录小程序名

                            },

                            method: 'POST',

                            header: {

                                "Content-Type": 'application/x-www-form-urlencoded; charset=UTF-8'

                            },

                            success: function (res) {

                                //返回的用户数据 -- 具体怎么操作,看后台回传值

                                if (res.data.error_code== 0) {

                                    wx.setStorageSync('loginsatus', true);

                                    wx.setStorageSync('userData', res.data.user);

}

}

})

}

},

                fail: res => {

}

})

},

        fail: res => {

            wx.showModal({

                title: '警告',

                content: '您点击了拒绝授权,无法使用此功能。如想正常使用,请点授权按钮重新授权',

                showCancel: false,

                success: function (res) {

                    if (res.confirm) {

                        console.log('用户点击确定')

}

}

})

}

})

},


退格什么的自己IDE格式化一下,登录逻辑就是用户点击button按钮,调起授权,getUserInfo拿到用户加密数据,login获取用户登录码,然后发给后台解密,返回openid,token,userdata,unionid等其他关键用户数据,有的后台会让前端自己解密,就更恶心了,不过还好有nodejs方法,可以前端自行解密,但要考虑到前端数据暴露的风险!
具体解密方法在此:
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#method-decode

自己下载解压,然后找到nodejs的代码,直接es6方法引入,调用,但是需要调用小程序的appid和小程序的session_key,而这两个数据前者暴露风险不大,后者暴露风险极高!

所有开发小程序登录的前端同仁,尽量进行后台解密,要是后台NB的天老大,他老二,就是让你解密,那你就和直系领导汇报风险,API里写的风险很明确,领导同意前端解密,直接撸代码,不同意的话,让后台做老大[Smart][Smart][Smart]

上一篇下一篇

猜你喜欢

热点阅读