小程序用户信息管理
只需要用户头像和昵称
可以使用 <open-data />
组件:
<open-data type="userAvatarUrl"></open-data>
<open-data type="userNickName"></open-data>
需要获取用户基本信息(不包括敏感信息)
一、可以使用wx.getUserInfo()
:
条件:
1、该方法需要用户授权过才能返回用户基本信息。
2、在用户未授权过的情况下调用此接口,将不再出现授权弹窗,会直接进入 fail 回调。在用户已授权的情况下调用此接口,可成功获取用户信息。
3、授权调用方式,看文档。
二、下面方案二会介绍~
获取用户敏感信息(openid、unionId、seesion_key等)
一、可以使用wx.getUserInfo()
+加密数据解密算法。
条件:同上。
二、下面方案二会介绍~
方案二
1、前台通过wx.login({})从微信服务器拿到jscode,向开发服务器发送jscode。接口文档
2、开发服务器以jscode/appid/app_secriet为条件,向微信服务器交换用户敏感信息(openid/session_key/unionid)。接口文档
3、以openId/unionId为核心数据,把用户信息录入数据库管理起来。
4、开发服务器把用户数据管理起来后,小程序就可以通过jscode,通过开发服务器提供的各种业务接口获取/上传数据 用户相关啦!
题外:
1、开发服务器把用户的openid经过算法处理返回小程序一个userId(出于安全考虑)。
2、权限控制也在小程序内完成,开发服务器可以返回一个字段来做。
问题:开发服务器可以拿到用户敏感信息,怎么拿到用户基本信息?
开发服务器会给小程序提供2个接口:
1、上面说了,小程序把jscode和用户头像发给开发服务器,这个作为登录接口,便于开发服务器向微信服务器获取敏感信息。
2、开发服务器向小程序提供一个上传信息接口,小程序把用户基本信息通过getUserInfo
获取到后,和jscode
一起上传到开发服务器。开发服务器把基本信息和敏感信息关联起来,存入数据库管理起来。
总结一下:
对于基础用户信息,昵称/头像/性别/国家/省份/城市/语言,小程序在用户授权后通过getUserInfo
自己都可以拿到。
对于敏感数据(openid/session_key/unionid),小程序是不能直接拿到的,开发服务器有两种获取方式:
1、直接通过小程序传过来的jscode,加上appid/app_secriet,向微信服务器直接获取。
2、小程序把通过wx.login({})
拿到的jscode 和 通过getUserInfo
获取到encryptedData和iv传给开发服务器,开发服务器向微信服务器通过jscode换取(openid/session_key/unionid)。开发服务器拿到encryptedData和iv和session_key,可以通过加密数据解密算法去解密得到敏感数据。
关于微信小程序登录:
1、我们通过wx.login({})获取code传给开发服务器,开发服务器通过code/appid/appsecriet去微信服务器获取openid/unionid/session_key。这个session_key就是小程序用户的登录态,它会过期。我们可以通过wx.checksession()判断用户登录是否过期。
2、开发服务器会把用户的openid/账号/密码/用户基本信息(除了openid都是小程序传过来的),关联起来储存进数据库。
3、用户一进入小程序,就会去获取code传给开发服务器,开发服务器换取session_key,通过openid去查找该用户查看session_key是否和之前一致,不一致就是过期了,返回给小程序是否过期消息。如果过期,小程序就跳到登录页面,没过期就跳去账户首页。
4、另外开发服务器的每一个接口都要求小程序要传一个token令牌字段,作为登录态,检查用户身份是否正确及登录是否过期。
5、token令牌怎么得到?我们为了安全,一般不把session_key直接直接给到小程序,而是把session_key通过算法得到一个userId,在开发服务器的登录接口返回给小程序,小程序储存起userId,每次请求都带上这个userId。
不需要服务器登录的用户呢?
既然不需要服务器登录,那也就不需要判断用户身份和登录是否过期。也就不需要登录系统。那就无所谓了。
疑问:为什么开发服务器通过jscode就已经获取到敏感数据了,为什么还要去解密???
说是,jscode只能获得openid,解密才能获得unionId。但文档说jscode也能获取openid。