微信小程序登录流程

482 阅读2分钟

1.原生方法:

小程序端代码:

wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://example.com/onLogin',//自己的服务的api
        data: {
          code: res.code//用户登录凭证(有效期五分钟)
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

服务端代码:

const axios = require('axios'); // 替换成你自己的小程序的 appid 和 appsecret const 
appid = 'YOUR_APPID'; 
const appsecret = 'YOUR_APPSECRET'; 
async function login(code) { 
    try { 
        const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appid}&secret=${appsecret}&js_code=${code}&grant_type=authorization_code`; 
        const response = await axios.get(url); return response.data; 
    } catch (error) { 
        console.error(error);
        return null; 
    }
}

功能描述:调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台帐号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台帐号)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。 流程图:

api-login.2fcc9f35.jpg 2.使用云开发方法:

云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性,因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。与 openid 一起同时注入云函数的还有小程序的 appid。

从小程序端调用云函数时,开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appidopenid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid

云函数: 新建名为test的云函数

const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
  // 这里获取到的 openId、 appId 和 unionId 是可信的,注意 unionId 仅在满足 unionId 获取条件时返回
  let { OPENID, APPID, UNIONID } = cloud.getWXContext()

  return {
    OPENID,
    APPID,
    UNIONID,
  }
}

小程序端调用:

wx.cloud.callFunction({
  name: 'test',
  complete: res => {
    console.log('callFunction test result: ', res)
  }
})