小程序的登录鉴权&&数据解密

小程序的登录鉴权&&数据解密

登录流程

1、用户使用wx.login获取临时code,有效期为5分钟

2、将临时code传到我们自己的后端服务,调用微信的API获取用户的session_keyopenid

3、后端自定义新的密钥并关联返回的session_keyopenid,将新的密钥返给前端

4、前端发送请求的时候,带着密钥,后端进行解析后返回数据

session_key和openid

1、session_key会话密钥,用来确定会话的操作的有效性和用来加密解密用户数据,服务器自己存储即可,不应该将密钥返给前端和对话使用

2、openid用户唯一标识,同样只用于服务器,可以用来标识用户的唯一性

接下来,我们说下它们的获取,通过服务端调用微信API获取

API:https://api.weixin.qq.com/sns/jscode2session

参数如下:

// 小程序页面
wx.login({
	success:(ret)=>{
		wx.request({
			url: 'http://test.com', // 后端服务器
			data:{
				code : ret.code
			}
		})
	}
})

后端服务我们使用request模块来发送请求

// 后端服务
let options = {
  url: 'https://api.weixin.qq.com/sns/jscode2session',
  qs:{
      appid: appid,  
      secret: secret,
      js_code: code,
      grant_type:'authorization_code'
  }
}

// 默认请求方式是get
request(options, (err, response, body) => {
	if(err) return err
	return body  // {openid:'openid', session_key:'session_key'} 不是真正的返回 看下面的代码
})

生成新的密钥 skey

上面我们获取了session_key和openid,下文两个字断称keyID,接下来我们生成一个新的密钥返回前端并将新密钥关联keyID。

我们使用crypto模块的sha1算法生成密钥

const crypto = require('crypto')

function getShaKey(data){
	return crypto.createHash('sha1').update(data, 'utf8').digest('hex')
}

上面的代码返回我们就改成这个新的skey,前端将这个密钥存在storage里面,请求的时候带上这个skey,就完成了自定义登录态。

wx.checkSession

用来校验当前用户的session_key是否有效,微信不会把session_key的有效期告知开发者,用户越频繁使用小程序,session_key有效期越长。

wx.checkSession({
   
	success:function(){
     // 当前session_key有效
		... // 可以写我们的业务代码
	},
	fail:function(){
   
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值