微信小程序登录鉴权

小程序使用微信登录态进行授权登录

 1、调用wx.login生成code

wx.login()这个API的作用为当前用户生成一个临时的登录凭证,这个临时登录凭证有效期只有5分钟。拿到登录凭证后就可进行下一步操作,获取openid和session_key

Taro.login().then((res) => {
        if (res.code) {
          const { code } = res
          getAuthCode({ code: res.code, appId: getGlobalData('appId') }).then((res) => {
            // TODO code有效期只有五分钟,不一定存缓存?
            setGlobalData('session', { ...res.data, code })
          })
        }
      })

2、 获取openId和sessionKey

openId,标识每个用户在订阅号、服务号、小程序三种不同应用的唯一标识。每个用户在每个应用的openId都是不一致的,所以在小程序里,我们可以用openid来标识用户的唯一性

appId是微信小程序的应用标识,即application Identification,每个小程序都会有一个appId,跟人的身份证一样

session_key需要在我们自己的服务端请求微信的第三方接口,这个接口需要加上四个参数字段

参数
appid 小程序的appid
secret 小程序的secret
js_code 前面调用wx.login派发的code
grant_type 'authorization_code'
const authPhoneFn = (params) => {
  getAuthPhone(params).then((res) => {
    if (res.code === 0) {
      const params = {
        ...res.data,
        grant_type: 'wechat-miniapp',
        scope: 'server',
      }
      authTokenFn(params)
    }
  })
}

从这几个参数,我们可以看出,要请求这个接口必须先调用wx.login()来获取到用户当前会话的code。那么为什么我们要在服务端来请求这个接口呢?其实是出于安全性的考量,如果我们在前端通过request调用此接口,就不可避免的需要将我们小程序的appid和小程序的secret暴露在外部,同时也将微信服务端下发的session_key暴露给“有心之人”,这就给我们的业务安全带来极大的风险。除了需要在服务端进行session_key的获取,我们还需要注意两点:

  1. session_key和微信派发的code是一一对应的,同一code只能换取一次session_key。每次调用wx.login() ,都会下发一个新的code和对应的session_key,为了保证用户体验和登录态的有效性,开发者需要清楚用户需要重新登录时才去调用wx.login()
  2. session_key是有失效性的,即便是不调用wx.login,session_key也会过期,过期时间跟用户使用小程序的频率成正相关,但具体的时间长短开发者和用户都是获取不到的

3、checkSession

验证登录态

 4、

猜你喜欢

转载自blog.csdn.net/m0_49471668/article/details/128503334