微信开发时, 用户使用小程序需要授权, 这时就要用到openid进行绑定这个用户。
1. 为什么要使用openid呢?
openid是指这个用户在某一个小程序中授权后的唯一标识(比如你的身份证)
2. 如果不使用会带来什么问题呢?
第一次授权时将用户数据保存到数据库, 然后用户把缓存清理了, 第二次授权的时候我们就无法知道这个用户是否授权过。用户就会重新保存一份新的数据进数据库。这是不符合正常逻辑的,因为如果该用户买过东西,再次授权,东西都看不到了,会像新的号一样。当然了, 有的设计是有自己的记录方式的,比如需要注册登录。
3. openid如何获取?
需要用到wx指定的接口
注意:
注意:一般都是将code值传到后端去获取openid,因为在前端可能会被抓包或爬取到你的appid和secret,不安全,如果放在后端获取openid,除非你的服务器被攻击了,不然就是安全的。下面的实例是在前端直接获取的,这个明白后,可以直接改成后端的,是逻辑一样的。
步骤一:获取code值
通过uni.login()接口(同理wx.login), 拿到用户的code值(5分钟后失效)。
代码:
uni.login({
success: res => {
//code值(5分钟失效)
console.info(res.code);
}
});
步骤二:获取openid
通过小程序的appid和secret和步骤一获取到的code值向wx指定的接口发送请求,便会返回openid(每个小程序唯一的)
代码:
uni.login({
success: res => {
//code值(5分钟失效)
console.info(res.code);
//小程序appid
let appid = 'wx3599fe368a452c9'; //我瞎写的
//小程序secret
let secret = '1a5567978saf65c43s8s2397er1332ce'; //我瞎写的
//wx接口路径
let url = 'https://api.weixin.qq.com/sns/jscode2session?app&secret=' + secret + '&js_code=' + res.code + '&grant_type=authorization_code';
uni.request({
url: url, // 请求路径
data: {}, // 请求体
method: 'GET', //请求方法,
header: '', //请求头
success: result => {
//响应成功
//这里就获取到了openid了
console.info(result.data.openid);
uni.setStorage({
key:'user',
data: result.data.openid
})
},
fail: err => {} //失败
});
}
});