小程序登录流程

650 阅读2分钟

登录描述

用户在页面中点击按钮,进行授权登录,点击确认后获取code,用code换取服务端的openid,完成授权登录

授权过程

  1. wx.getUserProfile()获取用户信息。 页面产生点击事件(例如 buttonbindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo 参数: desc必传,声明获取用户个人信息后的用途,不超过30个字符
 wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        console.log(res.userInfo)
    }
  })
  1. wx.login()调用接口,获取登录凭证(code) 通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识,及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
    响应参数
    code用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 auth.code2Session,使用 code 换取 openidunionidsession_key 等信息.
  wx.login({
    success (res) {
      if (res.code) {
        //发起网络请求
        wx.request({
          url: 'https://example.com/onLogin',
          data: {
            code: res.code
          }
        })
      } else {
        console.log('登录失败!' + res.errMsg)
      }
    }
  })
  1. 完整代码
import { AtButton } from 'taro-ui'
const handleGetUser = () => {
  Taro.getUserProfile({
    desc: "用于完善会员资料",
    success: res => {
      userLogin()
      Taro.showLoading({ title: "授权中...", mask: true });
    },
    fail: err => {
      Taro.showToast({ title: "授权失败", icon: "none" });
    },
    complete: (res) => {
      console.log('关闭授权弹窗', res)
    },
  });
}
const userLogin = () => {
  Taro.login({
    success(res) {
      Taro.hideLoading()
      console.log('login: ', res)
      if (res.code) {
        // todo 发起网络请求
        Taro.request({
          url: 'https://example.com/onLogin',
          data: {
            code: res.code
          }
        })
      } else {
        console.log('登录失败!' + res.errMsg)
      }
    }
  })
}
<AtButton type='primary' onClick={handleGetUser}>调起小程序授权登录</AtButton>
  1. 小程序通过wx.getUserProfile接口可以正常返回用户信息,无法弹出授权弹框。
    对低于2.27.1版本的访问,将不会弹出授权弹框。降低版本到2.24.7可弹出。
  2. 微信小程序登录模式
    小程序登录模式是Oauth2的授权码登录
    对接内部的服务端,内部服务端扮演客户端模式

自此微信小程序的授权登录流程结束,获取到用户的信息以及openid,可以本地存储,后续做业务逻辑处理等。具体api的参数,可去微信小程序官方文档中查看。本人亲测有效,如有其他问题请留言