官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
一、登录
1. 登录流程
登录之后可以获得微信官方给我们提供的“用户身份标识”,与我们的小程序建立联系
步骤如下:
- 前端调用 wx.login() 获得「临时登录凭证」,向后端发请求
- 后端调用 auth.code2Session 接口,换取「用户唯一标识 OpenID」和「会话密钥 session_key」
- 前端拿到后端回传给的数据,确定登录状态,做相应业务逻辑
2. UnionID 机制
UnionID 可以用来区分用户的唯一性,那么怎么能获取用户 UnionID 呢?
(从2021年2月23日起,微信调整了接口,可以直接使用 wx.login 获得临时登录凭证)
- wx.login 获取临时登录凭证 code 发送给后端,后端用这个 code 与微信接口服务打交道获取 UnionID
老版本是下面两种方式(已废弃)
- wx.getUserInfo(需要用户授权)
- wx.login + code2Session(用户关注/授权登录过同主体的公众或移动应用,无需用户再次授权)
3. 授权
部分接口需要用户授权,调用时小程序会做以下不同的判断,判断逻辑如下:
- 用户已授权 → 直接进入接口的 success,不会有弹窗
- 用户已拒绝 → 直接进入接口的 fail,不会有弹窗
- 用户未授权 → 会弹窗询问用户,根据用户反馈进入 success 或 fail
前端和用户可以查看授权状态
- 前端可以通过 wx.getSetting 可以获取用户当前的授权状态
- 用户可以通过小程序(「右上角」 - 「关于」 - 「右上角」 - 「设置」)中控制对该小程序的授权状态
前端可以使用 wx.authorize 在调用授权 API 之前提前做发起授权请求的处理
按照 scope 分类,有如下需要授权才能用的接口
scope.userInfo | wx.getUserInfo | 用户信息 |
---|---|---|
scope.userLocation | wx.getLocation, wx.chooseLocation | 地理位置 |
scope.userLocationBackground | wx.startLocationUpdateBackground | 后台定位 |
scope.werun | wx.getWeRunData | 微信运动步数 |
scope.record | wx.startRecord | 录音功能 |
scope.writePhotosAlbum | wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum | 保存到相册 |
scope.camera | camera 组件 | 摄像头 |
scope.address | wx.chooseAddress | 通讯地址(可以直接调用) |
scope.invoiceTitle | wx.chooseInvoiceTitle | 发票抬头(可以直接调用) |
scope.invoice | wx.chooseInvoice | 获取发票(可以直接调用) |
授权有效期
- 一旦用户明确同意或拒绝授权,其授权关系会记录在后台,直到用户主动删除小程序
最佳实践
- 在真正需要使用授权接口时,在想用户发起授权,并附带使用该功能的理由
注意事项
- wx.authorize({scope: “scope.userInfo”}),不会弹出授权窗口,请使用
- 需要授权 scope.userLocation、scope.userLocationBackground 时必须配置地理位置用途说明
- 后台定位 scope.userLocationBackground 不会弹窗提醒用户,需要用户在设置页中,主动将“位置信息”选项设置为“使用小程序期间和离开小程序后”。开发者可以通过调用wx.openSetting,打开设置页
「@浪里淘沙的小法师」