美文网首页
微信小程序登录/授权流程

微信小程序登录/授权流程

作者: 指尖轻敲 | 来源:发表于2018-11-12 11:53 被阅读78次

    登录


    一、调用wx.login()

    小程序端通过调用wx.login()API,调用成功的话会在成功的回调里获取一个有时效的登录凭证code
    然后调用自家的服务器接口,把获取到的code传递给服务端。

    wx.login({
      success (res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'https://test.com/onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
    
    二、从微信端获取用户信息

    服务端在拿到code之后,会调用微信端的接口,这时需要把code、appid、secret、grant_type传递给微信端,换取用户的信息。
    调用成功的话,微信端会返回openid、session_key等信息,如果满足unionid条件也会同时返回。
    至此,登录过程完成。

    三、检测登录状态

    因为wx.login接口具有时效性,实际项目中我们肯定不需要每次都直接调用登录接口,而是先检测之前的登录状态是否过期,如果没有过期则无需再次登录。

    wx.checkSession({
      success () {
        //session_key 未过期,并且在本生命周期一直有效
      },
      fail () {
        // session_key 已经失效,需要重新执行登录流程
        wx.login() //重新登录
      }
    })
    

    授权


    小程序的API接口中有些接口是需要用户授权才可以调用的,以调用获取用户信息(性别、昵称、头像、地区等)的API为例:

    目前接口调整为,如果没有授权不会出现授权弹窗而是直接进入fail回调,而授权弹窗也只能通过<button open-type="getUserInfo"/>去触发,调用wx.authorize()不会出现授权弹窗。总之授权功能需要用户手动去触发。

    一、检查是否授权过

    小程序端通过调用wx.getSetting()接口可以在成功的回调里获取到所有已经授权过的信息。

    wx.getSetting({
      success (res) {
        // res.authSetting = {
        //   "scope.userInfo": true,
        //   "scope.userLocation": true
        //    ...
        // }
        if(!res.authSetting['scope.userInfo']){
            // 没有授权做引导处理
        }
      }
    })
    

    这里需要小程序端进行判断,如果已经授权过就可以直接调用相应的接口,如果没有授权,需要提示去授权或者直接跳转到授权页。

    二、授权

    用户通过点击<button open-type="getUserInfo" bindgetuserinfo="onGotUserInfo"/>弹出授权弹窗,如果同意授权则可以从bindgetuserinfo回调中获取到用户信息。

    三、设置界面

    现调整为只能通过点击<button open-type="openSetting">按钮跳转至设置界面

    当然也可以[右上角] - [关于] - [右上角] - [设置]打开设置界面,设置界面只会出现已经授权过的的权限信息。在这里可以自由设置权限。

    相关文章

      网友评论

          本文标题:微信小程序登录/授权流程

          本文链接:https://www.haomeiwen.com/subject/trcpaftx.html