小程序中的授权登录
2019-01-17 本文已影响0人
方_糖
详情可以参考https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01
一.授权
效果
效果
代码
<view>
<open-data type="userAvatarUrl"></open-data>
<open-data type="userGender" lang="zh_CN"></open-data>
<button type="primary" open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="onGotUserInfo">获取用户信息</button>
</view>
授权都授权了什么,包含了啥内容呢?
根据微信官方提供的scope 列表,有以下内容:
image.png
二.登录
openId是识别一个用户的标识,只要进入了小程序 , 就会有一个openId ,通过openId ,就能判断出登录的用户是谁。
登录的步骤
① 小程序前端使用wx.login() 从微信服务器获取code
② 小程序前端将code 发送给开发者服务器,开发者服务器利用appId、appSecret 和code 向微信服务器换换取用户openId 和session_key
③ 开发者服务器自定义登录态并将其与openId 和session_key 关联起来然后写session(定义登录过期时间)
④ 开发者服务器将登录态返回给小程序前端,小程序前端使用wx.setStorageSync() 将登录态保存起来
⑤ 小程序前端在执行业务请求时将登录态发送给开发者服务器,以便开发者服务器知道当前操作的用户是哪位。
//checkSession检查登录态(通过session_key,openid来得到)是否过期
wx.checkSession({
success(){
console.log("success")
},
fail(){
var that = this;
//登录
wx.login({
success(res) {
if (res.code) {
//获取code
var code = res.code;
//在小程序规定请求地址通过appId,appSecret,登录时获取的code 来获得json数据
var url = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + that.data.appId + '&secret=' + that.data.secret + 'SECRET&js_code=' + code + '&grant_type=authorization_code';
//向服务器发起请求获取session_key,openid
wx.request({
url: url,
data: {
session_key: "",
openid: ""
}
})
}
else{
console.log('登录失败!' + res.errMsg)
}
}
})
}
})
以上我们用代码说明了第一步,第二步,那第三步是什么意思呢?
详解第三步:写session
刚刚说的都是前端保存 ,可以通过wx.checkSession() 来检查session_key 是否过期
现在我们要说后端,在后端写session 的时候可以直接设定过期时间,定期通知小程序前端重新进行登录(wx.login)。
session如何写:https://www.cnblogs.com/xjnotxj/p/7239663.html