admin管理员组

文章数量:1516870

目录


1 问题描述

最近有用户反馈,小程序登陆有问题

小程序成功登陆后,安卓用户预约操作时,偶尔会出现登陆异常情况

之前解决过shiro登陆失败的问题, ,但是没有彻底解决登陆失败的问题。

登陆失败现象极其诡异,问题难以复现。

1 用户10秒前刚登陆,用户后续操作马上提示“登陆异常”

2 部分 安卓用户 在登陆后,在后续操作提示“登陆异常”,这种现象是偶然发生的,安卓用户出现登陆异常概率大概是 10分之1

2 苹果用户 从未没有出现”登陆异常“现象。

2 登陆实现方案

在介绍问题前,本文先简单描述下本文应用登陆实现方案。

本文的小程序应用是单独使用Cookie来维护登陆状态,登陆并未使用小程序的sessionKey来维护后台登陆状态。

后端Cookie校验用户登陆状态

为什么不使用小程序SessionKey维护登陆状态?

1 老应用有单独Cookie登陆方式。

2 后台支持多平台登陆(比如小程序、h5网页等),不完全依赖小程序SessionKey完成登陆 。

Shiro控制用户权限

1 获取微信小程序code值

2 code值以及appId换取用户openId

3 openId快捷登陆

4 小程序保存登陆Cookie

5 小程序携带Cookie请求后端应用

6 后端根据前端的Cookie校验用户的登陆情况

可惜小程序不支持Cookie,(浏览器一般会保存用户Cookie,方便后续浏览网页使用)

如何解决小程序支持Cookie登陆?

以下是网上常见的Cookie登陆解决方式。

// 登录
      wx.login({
        success: function (res) {
          log.info(res)
          //获取登录的临时凭证
          var code = res.code;
          //调用后端,获取微信的session_key,secret
          wx.request({
            url: domain + '/user/wxLogin',
            header: {
              "Content-Type": "application/x-www-form-urlencoded"
            },
            method: "POST",
            data: util.json2Form({
              code: code,
              appId: that.globalData.appId
            }),
            success: function (result) {
              // cookie存储起来
              var cookie = result.header['Set-Cookie']
              wx.setStorageSync('cookie', cookie)
              
            },
            fail: function (res) {
              
            }
          })
        }
      })
    })

wx.request从res.header['Set-Cookie']中获取cookie信息,并使用wx.setStoargeSync将cookie信息同

本文标签: 登陆失败登陆异常编程