Laravel Passport & 微信小程序的登录态维护 (二)

更新日期: 2017-10-25 阅读次数: 9553 分类: 微信小程序

小程序上线之后,报警邮件一直报错。但是用户并没有反馈无法使用。说明是几个不重要的接口在未登录的情况下报错了,而且只有新用户会遇到

The resource owner or authorization server denied the request. {"exception":"[object] (League\\OAuth2\\Server\\Exception\\OAuthServerException(code: 9): The resource own
er or authorization server denied the request. at /home/zhongwei/work/sd-sea-travel/vendor/league/oauth2-server/src/Exception/OAuthServerException.php:168)

首页无法测试。由用户个人中心测试,主要测试 app.js 中的 onLaunch - login 是否能在用户第一次打开的是非 index 页也能够被调用。先将 app.json 中的用户中心页面放到第一的位置,取代 index.

果然效果很明显

  • login
  • get_user_info
  • orders_stat

三个接口被同时调用,所以结果是

  • login 返回结果正常
  • get_user_info, orders_stat 均报 401 未授权错误,原因是这三个请求是几乎同时发出的。这两个接口并没有用上 login 成功返回的登录态

再次刷新页面就没问题了。

如何解决第一次访问报错的问题

这个问题必须解决,原因是,用户可能通过其他人分享的商品详情页进入小程序。

而详情页包含了分销关系记录的逻辑,这些接口都是登录之后才能调用的。

  • 未登录。先登录再发请求
  • 已登录。直接请求

微信小程序的 wx.request 奇葩之处

状态码 401 被归类在 success 之内。

access_token 失效的处理

例如,后台清理了所有 access_token, 或者 access_token 失效,同样会报 401 错误。

合理的做法是,在每个 api 调用失败时(status code 为 401),调用一次 401。

但是这个做法太麻烦,目前也没有想到更简单的做法。

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式