维持小程序的登陆态
第一确认自己是不是使用自有帐号注册,比如说让用户输入手机号注册或登录。如果是的话,就是用自己的机制,比如可以用手机号来唯一标识每一个用户。
如果不是的话,就请参考一下的官方提供的机制。
一,官方提供的登陆态时序图。
第一步。需要先通过wx.login获取code,code是登录凭证。wx.login介绍
利用wx.login就可以返回code。
wx.login({
success:
function(res) {
var code = res.code;
if (code) {
console.log(
'获取用户登录凭证:' + code);
}
else {
console.log(
'获取用户登录态失败:' + res.errMsg);
}
}
});
第二步。将获取的code发送到自己的后台服务器。 调用wx.request方法。
wx.request({ url:'--------填写自己的服务器地址', data: { code:code-----右边的code是你用wx.login获取的code,左边的code是参数,传到后台服务器 },
method:"GET",
header:{
"content-type":"application/json"
},
success: function(result) {
console.log('request success', result)
}
})
这儿有几个需要注意的地方,
①method有两种,get和post,它们对应的header中填写的东西也不一样,
如果是post,则改成
header:{content-type": "application/x-www-form-urlencoded"},
②content-type是大写还是小写,好像也有点不同的地方。
三。后台服务器接收到code之后,就通过code和自己开发者后台获取到的appid和appsecret来通过http请求向微信服务器请求获取openid(用户的唯一标识)和session_key(会话密钥)。方法可以参照
四,生成第三方缓存3rd_session,然后之后将这个返回给小程序。
五小程序接受之后就将获得的3rd_session存到本地缓存中
这个可以在上边第二步的success(res)返回的数据中接收,
然后利用wx.setstorage方法存放到缓存中(这儿有几种不同的方式),一般用同步的,通过它的success()的方法还可以确认操作结果。
六,之后用户进入小程序的时候带上3rd_session发送到后台服务器,看是不是合法的。
谈一下我自己的理解
①我认为不管哪种方式都是为了让后台可以辨识用户。登录态就是唯一确认某个用户。
微信官方提供的这种使用微信帐号进行标识,因为它之后通过后台服务器获取的openid就可以对每个用户进行唯一标识。对于小程序来说,不同的用户的openid是不一样 的。(还有一个叫unionid,这个是如果小程序绑定了公众号,那么这个unionid对于整个公众号和小程序来说都是唯一的。)
②3rd_session就相当于是一个登录凭证,证明这个用户曾经登陆过
③微信还提供了一个wx.checksession({})的api,介绍,它对于开发者来说是透明的,
④后台服务器生成的3rd_session和微信服务器返回的session都是有过期时间的。这个要注意。
⑤其实微信的方式也是使用openid来唯一标识每个用户,只不过openid比较重要,所以不能放在小程序上,所以就得引入一个新的量,就是3rd_session来放在小程序上。