微信小程序登录鉴权
2023-04-18 14:29:25 时间
小程序使用微信登录态进行授权登录
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的获取,我们还需要注意两点:
- session_key和微信派发的code是一一对应的,同一code只能换取一次session_key。每次调用
wx.login()
,都会下发一个新的code和对应的session_key,为了保证用户体验和登录态的有效性,开发者需要清楚用户需要重新登录时才去调用wx.login()
- session_key是有失效性的,即便是不调用wx.login,session_key也会过期,过期时间跟用户使用小程序的频率成正相关,但具体的时间长短开发者和用户都是获取不到的
3、checkSession
验证登录态
4、
相关文章
- 产业规模破万亿元 工业互联网提档升级
- 5G发展依旧任重道远
- 2022隐私计算大会:保障数据安全流通,可信隐私计算是支撑性技术
- 边缘计算及其惊人的应用
- 万亿蓝海:确定性网络与元宇宙
- 5G发牌三周年 “三生万物”种出繁花似锦
- 5G消息,能否成为运营商数字经济时代的护城河?
- 城商行容器云平台应用场景及持久化存储实践
- 支持 Wi-Fi 6/6E 的智能手机将在 2025 年占据市场主导地位
- 5G智能工业机器人应用广泛 运营商如何助推产业链协同创新?
- 面向2030年的6G,将带来什么改变?
- Wi-Fi定位技术在强手如林的赛道里如何生存
- 直播周回顾日记Day5:快速现代化应用改造 Graviton赋能轻巧如云
- 人工智能能否在物联网应用中提供价值?
- 新继网红WiFi7 到底有多厉害
- IDC:2021年全球公有云服务收入增长29%突破4000亿美元
- 云原生时代 F5分布式云服务帮助软银构建现代化应用架构
- 云存储架构框架设计如何实现以应用为基础的服务模式?
- 全球蜂窝物联网模组最新报告解析:Cat.1还会风光5年/5G RedCap为时尚早
- Gartner:混合云已成为主流应用趋势