获取登录态
写在前面
对用户来说,可以看作有两个登录态
-
小程序端的登录态: 用户的基本信息,昵称,电话,头像等等,原先在小程序端用
getUserInfo
可获取,但目前api已经不支持首次就用该方法获取,需要引导用户点击。首次授权后即可直接调用getUserInfo
获取。<button open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权</button>
bindGetUserInfo(e){ if (e.detail.userInfo) { //用户按了允许授权按钮 this.setData({ userInfo:e.detail.userInfo )} } else { // 用户取消了授权 } },
授权后可在需要时调用
wx.getUserInfo({ success:function(res){ console.log(res) } })
-
服务端的登录态: 用户的open_id、session_key等等。open_id是用户在该小程序中的唯一标识,当需要用户与自建后台交互时,需要先调用wx.login获取code,用code发起请求,后台利用code + appid + secret 可获取用户的open_id和session_key。
wx.login({ success: function (res) { let code = res.code; //把code 给后台,配合appId和serect获取openid wx.request({ method: 'POST', url: 'http://10.1.13.35:3000/wxLogin', data: { code: code }, header: { 'content-type': 'application/x-www-form-urlencoded' // 默认值 }, success: function (res) { let data = res.data['result_row']; wx.setStorageSync('userInfo', { session_key: data.session_key, openid: data.openid }) this.setData({ userInfo: wx.getStorageSync('userInfo') }) } }) } })
后台:
app.post('/wxLogin',function(req,res){ let params = req.body, code = params.code, APP_URL = `https://api.weixin.qq.com/sns/jscode2session? appid=${APPID} &secret=${APPSECRET} &js_code=${code} &grant_type=authorization_code`, APPID = '...', APPSECRET = '...'; request({ url: APP_URL,//请求路径 method: "GET",//请求方式,默认为get headers: {//设置请求头 "content-type": "application/json", }, }, function(error, response, body) { if (!error && response.statusCode == 200) { let data = JSON.parse(body) res.json({ 'ret_code':0, 'result_row':JSON.parse(body) // body = {'session_key:... , open_id: ...'} }) } }); })