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

文章目录

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

    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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式