微信小程序登录鉴权

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

 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、

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值