小程序登录

注:

1. 自定义登录态:因为小程序没有Cookie,所以在此处自定义登录态(伪Cookie)来识别用户。

    Cookie是为了更好的在服务器存储用户信息,保证用户在小程序与服务器传输数据的安全性。

 

实现步骤:

1. wx.login获取用户临时登录凭证code。

  小程序开发文档:

wx.login(Object object)

调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。

示例代码:

wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://test.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

 

 

 2. wx.getUserInfo获取加密过的数据encryptedData和解密参数iv

wx.getUserInfo(Object object)           

获取用户信息。【调用前需要用户授权

3. 把步骤一、二中的code、encryptedData、iv传到开发者自己服务端

 从服务端获取到code、encryptedData、iv之后用get方法请求如下微信接口

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

appid:小程序appid

secret:小程序密钥

js_code:第一步获取的临时登录凭证code

grant_type:'authorization_code'

接口会返回 openid, session_key

注意:用户已经授权过的平台还会返回unionId,如果你只是需要unionId,则到此为止

 如果没有授权过则用encryptedData、session_key、iv、appid、secret进行解密,

4. 仿照示例解密后获得unionId,想做什么就做什么了~

authLogin () {

  wx.login({

   success: loginRes => {

    let code = loginRes.code // 获取用户临时code

    wx.getUserInfo({

     success: function (res) {

      let encryptedData = res.encryptedData // 获取加密数据

      let iv = res.iv // 解密参数

      // 发送解密必要数据到服务端

      wx.request({

       url: 'http://localhost',

       methods: 'POST',

       data: {

        code: code,

        encryptedData: encryptedData,

        iv: iv

       },

       succeess: res => {

        // 服务端首先调用微信接口获取session_key

        // 用户已经授权过的平台会直接返回unionId

        // 没有授权过则用session_key进行解密

        // 解密成功后服务端根据逻辑返回自定义信息

       }

      })

     }

    })

   }

  })

 }

新的授权需用button组件调用getUserInfo,所以在这之前无法调用wx.login,但是如果先调用获取用户信息再调用wx.login的话,解密过程会出错,猜测code对应的session_key和之前getUserInfo获取的encryptedData不匹配

在页面的onLoad生命周期里调用wx.login,获取的code存入data以备需要的时候使用,但是code失效时间为5分钟,如果用户停留页面时间过长后点击授权登录,此时的code已经过期了,所以,获取code的函数应该每4分钟左右调用一次

posted @ 2020-06-11 11:08  小那  阅读(222)  评论(0编辑  收藏  举报