微信公众号h5项目的无感登录,避免code重复使用的解决方案

1、首先我们查看微信网页开发/网页授权

截图:

官网链接:网页授权 | 微信开放文档

2、h5项目中写得无感登录方法如下,什么时候去调取登录根据业务需求加上,以及跟后端协商返回的字段加上登录就可以了

var loginFlag = false;

async function newlogin() {

  console.log("进没进登录");

  let pageUrl = window.location.href;

  console.log("第一次pageUrl", pageUrl);

  let redirect_uri = encodeURIComponent(pageUrl);

  console.log("redirect_uri", redirect_uri);

  const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE&connect_redirect=1#wechat_redirect`;

  const code = getQueryString("code");

  console.log("cade0000", code);

  if (code) {

    let res = {};

    res = await login({ code });

    console.log("=====================", pageUrl, res);

    const token = res.data.autograph;

    uni.setStorageSync("token", token, res);

    loginFlag = false;

    uni.navigateBack();

  } else {

    window.location.href = authUrl;

    return await Promise.reject("跳转授权");

  }

}

function getQueryString(name) {

  let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");

  let r = window.location.search.substr(1).match(reg);

  if (r !== null) return unescape(r[2]);

  return null;

}

这里的appid为自己项目申请的appid,loginFlag字段是做的开关,避免前端重复去调取登录,拿到code值就不用再去重复登录,就不会出现code值被重复使用的问题,因为授权成功以后,访问的项目链接会被自动带上code字段,就会报出code已被使用的情况

3、我这个项目的业务逻辑是后端返回401就需要前端重新登录,所有这里的loginFlag字段是这样使用的,代码如下:

if (res.data.code == 401) {

          console.log("强制跳转登录", loginFlag);

          if (!loginFlag) {

            loginFlag = true;

            newlogin();

          }

          // rejected('not login')

        }

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值