快捷搜索: 王者荣耀 脱发

微信小程序之登录(Node.js-Koa2-本地服务器)

1.登录逻辑

  1. 调用接口wx.request()将code发送到开发者服务器。
  2. 在开发者服务器处,将从客户端传递过来的code以及小程序本身的appid和appsecret组合成一段URL:
  3. 通过算法(可以是当前时间或随机数等等),生成_3rd_session。
  4. 将openid和session_key封装成JSON对象。
  5. 生成的_3rd_session作为key,封装好的JSON对象作为value,存储到Redis数据库中,并设置好合适的过期时间。
  6. 将生成的_3rd_session发送到客户端中。
  7. 在客户端中,调用接口wx.setStorageSync(),把_3rd_session存入缓存中。
  8. 完整的登录流程结束。

2.自定义登录态

2.1 登录验证

用户登录后重新进入小程序时,调用接口wx.checkSession()来检测登录态。若有效,则继续进入下一页面;若失效,则重新发起上述的登录流程。

2.2 登录态维护

  1. 用户已经登录成功,进入下一级页面。
  2. 用户发起敏感请求(如删除,修改,添加等操作),调用接口wx.request()时,使其携带缓存中的_3rd_session。
  3. 开发者服务器响应请求前,先到Redis数据库中查询有无键值为_3rd_session的记录。
  4. 若记录存在并有效,则正常响应请求。
  5. 若记录不存在或已经失效,则拒绝请求,提醒用户未登录。

3.前期准备

  1. 获取appsecret:打开 > 登录 > 开发 > 开发设置 > AppSecret。
  2. Node.js Koa2框架的基本配置,不再赘述。
  3. Node.js module:redis,koa2-request的基本使用,不再赘述。

4.登录实现(核心代码)

客户端登录:

onMyLogin(){
          
   
	wx.login({
          
   //获取登录凭证
    	success: res => {
          
   
      		wx.request({
          
   
        		url: http://127.0.0.1:3000/user/wxlogin, // 登录路由
        		method: POST,
                 data: {
          
   // 发送appid,appsecret和code到开发者服务器
                  "APPID": "wx9215321878b739b6",
                  "SECRET": "63ec9a12c928611a642144aa5a615fc1",
                  "JSCODE": res.code
                },
                header: {
          
   
                  Content-Type: application/x-www-form-urlencoded
                },
        		success(res) {
          
   
          			//将登录凭证_3rd_session存入缓存
            		wx.setStorageSync("_3rd_session", res.data)
        		}
			})
		}
	})
}

开发者服务器处理登录请求:

登录态检验的中间件:

const redisClient = require(../db/redis)
loginCheck = async (ctx,next) => {
          
   
    // 查询数据库,判断_3rd_session是否存在且有效
    const res = await redisClient.get(ctx.request.body._3rd_session)
    if(res){
          
   
        ctx.request.body.openid = JSON.parse(res).openid
        await next()
    }else{
          
   
        ctx.body = "未登录!"
    }
}

module.exports = {
          
   
    loginCheck
}
经验分享 程序员 微信小程序 职场和发展