微信小程序通过e.detail.userInfo获取数据为空

微信小程序通过e.detail.userInfo获取数据为空,怎么解决?
这个是页面点击登录的页面代码:

img


这个是点击登录的代码:

img


这个是获取用户信息的代码:

img

现在的问题是,第一次进入点击登录,是可以跳转到登陆页面的。现在退出登陆后,一段时间后再去操作,再次点击登录按钮的时候,e.detail.userInfo就一直为空,跳转不到登陆页面了。我自己开发者工具预览过了,就一直能获取到e.detail.userInfo信息。我想是不是正式环境用户授权没过的关系

清除缓存试试,我记得这个接口好像废弃了

你正在使用的wx.getUserInfo是一个废弃接口,但是不耽误你使用该接口获取一些初始化的用户数据,首先getUserInfo接口需要在用户登录之后才能正常使用,详情可见微信官方的登录步骤指南文档,我当时就是照着这个敲的
链接:微信小程序官方登录文档
根据我的实验,当你没有在登陆状态使用getUserInfo时,会throw出一个异步的Error。

用户没有授权,就无法获取用户信息

是用的open-type=“getUserInfo” 么
let userInfo = e.detail.userInfo;
console.log(userInfo);

查看官网,官方已经使用getUserProfile代替getUserInfo

wx.getUserProfile(Object object)
获取用户信息。页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo,详见 用户信息接口调整说明。

基于new bing部分指引作答:
你提到的情况可能与用户授权和登录状态有关。在正式环境中,用户授权是一个重要的步骤,只有得到用户的明确授权才能获取其用户信息。当用户未授权或登录状态失效时,e.detail.userInfo 将为 null 或空。

有几种可能的解决方法:

  1. 检查用户授权状态:在点击登录按钮时,可以先判断用户是否已经授权过,如果已授权,则直接获取用户信息;如果未授权,则引导用户进行授权操作。
// 点击登录按钮时先判断用户是否已授权
wx.getSetting({
  success: function (res) {
    if (res.authSetting['scope.userInfo']) {
      // 用户已授权,可以直接获取用户信息
      wx.getUserInfo({
        success: function (res) {
          console.log(res.userInfo);
          // 进行登录等操作
        }
      });
    } else {
      // 用户未授权,引导用户进行授权操作
      // ...
    }
  }
});
  1. 设置登录态有效期:当用户登录成功后,记录登录态并设置有效期,超过一段时间后需要重新登录,可以通过定时器或其他方式判断登录态是否还有效。

  2. 检查网络状态:确保设备的网络连接正常,因为在无网络状态下,微信小程序不能正常获取用户信息。

  3. 检查代码逻辑和错误处理:仔细检查代码,特别是涉及授权和用户信息获取的部分,确保没有逻辑错误和异常情况的处理。

如果以上方法仍然无法解决问题,建议查看微信开发者文档中相关授权和登录的相关内容,或向微信官方技术支持咨询,以获得更准确和详细的帮助。同时,可以考虑使用调试工具进行排查,了解具体错误信息以及可能出现的其他问题。

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

根据您提供的信息和代码截图,问题可能出现在用户登录后获取用户信息的过程中。您提到第一次登录时可以成功获取用户信息,但在退出登录后,再次点击登录按钮时,e.detail.userInfo始终为空,导致无法跳转到登录页面。

可能的原因是小程序在用户授权获取用户信息后,会缓存用户信息。当用户退出登录后,缓存的用户信息可能没有被清除,导致再次点击登录按钮时仍然读取到缓存的空用户信息。

解决这个问题的方法是在点击登录按钮的事件处理函数中,先清除缓存的用户信息,然后再进行授权获取用户信息的操作。以下是一个示例的代码片段,演示了如何清除缓存的用户信息:

// 点击登录按钮的事件处理函数
loginButtonTap: function(e) {
  var that = this;
  
  // 清除缓存的用户信息
  wx.removeStorageSync('userInfo');
  
  // 授权获取用户信息
  wx.getUserProfile({
    desc: '用于完善会员资料',
    success: function(res) {
      // 获取用户信息成功
      var userInfo = res.userInfo;
      // 保存用户信息到缓存
      wx.setStorageSync('userInfo', userInfo);
      // 跳转到登录页面或其他操作
      // ...
    },
    fail: function(res) {
      // 获取用户信息失败
      // 处理失败的情况
      // ...
    }
  });
}

在上述代码中,我们使用了wx.removeStorageSync('userInfo')来清除缓存的用户信息,然后通过wx.getUserProfile重新进行用户信息的授权获取和处理。

请注意,上述代码仅为示例,实际操作可能需要根据您的业务逻辑和需求进行相应的调整和修改。

  1. 初始时检查userInfo,如果为空就调用wx.getUserInfo
  2. 如果用户勾选"不再提示",就提示用户调用Setting -> 授权管理重新授权
  3. 收到用户授权成功的回调后,再跳转到登录页

如果在微信小程序中通过e.detail.userInfo获取用户数据为空,可以考虑以下几种解决方法:

  1. 检查用户是否拒绝了授权:在用户第一次授权时,可能会选择拒绝授权。您可以通过调用wx.getSetting方法来获取用户的授权情况,判断是否有获取用户信息的权限。如果没有权限,可以引导用户重新授权。
wx.getSetting({
  success: function(res) {
    if (res.authSetting['scope.userInfo']) {
      // 已经授权,可以直接调用 getUserInfo 获取用户信息
      wx.getUserInfo({
        success: function(res) {
          console.log(res.userInfo);
        }
      });
    }
  }
});
  1. 检查小程序的设置:在小程序的后台管理中,确保已经开通并配置了获取用户信息的权限。

  2. 检查事件绑定:如果是在某个事件中获取用户信息,例如按钮点击事件,确保该事件已经正确绑定并触发。

  3. 检查小程序版本:在某些旧版本的微信客户端中,可能存在获取用户信息为空的问题。尝试更新微信客户端到最新版本,或者在开发者工具中进行测试。

如果以上方法仍然无法解决问题,建议查看微信官方文档,或者在微信开放社区中提问,以获取更详细和准确的帮助。