uni-app 手机号一键登录报错

uni-app 手机号一键登录报错

操作步骤:

手机号一键登录报错,一键登录有余额,服务空间套餐:专业版,为什么一键登录还是会报错,登陆不了?服务空间没有使用其他的功能,只有一键登录。一键登录还会受其他影响而报错吗?而且uni-admin统计后台也登录不上了,报错uni-id-co DB read action failed, resource exhausted,这两个有关联吗?

预期结果:

手机号一键登录正常使用

实际结果:

手机号一键登录报错

bug描述:

手机号一键登录报错,一键登录有余额,服务空间套餐:专业版,为什么一键登录还是会报错,登陆不了?服务空间没有使用其他的功能,只有一键登录。一键登录还会受其他影响而报错吗?而且uni-admin统计后台也登录不上了,报错uni-id-co DB read action failed, resource exhausted,这两个有关联吗?麻烦尽快解答,谢谢!


更多关于uni-app 手机号一键登录报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

看看服务空间资源页面,你的云函数资源用超了

更多关于uni-app 手机号一键登录报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


一键登录还会影响云函数资源?

回复 窗边的小豆豆: @DCloud_uniCloud_WYQ

回复 窗边的小豆豆: 您好参考https://doc.dcloud.net.cn/uniCloud/uni-login/price.html

在使用 uni-app 进行手机号一键登录时,可能会遇到各种报错。以下是一些常见的问题及其解决方法:

1. 网络请求失败

  • 原因: 可能是网络问题、请求地址错误或服务器问题。
  • 解决方法:
    • 检查网络连接是否正常。
    • 确认请求地址是否正确。
    • 检查服务器状态,确保服务器正常运行。

2. getPhoneNumber 授权失败

  • 原因: 用户未授权获取手机号,或授权失败。

  • 解决方法:

    • 确保用户在获取手机号时点击了“允许”授权。
    • 检查 getPhoneNumber 方法的实现是否正确。
    • 在小程序中,确保 getPhoneNumber 事件绑定的方法正确。
    <button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"></button>
    
    methods: {
      getPhoneNumber(e) {
        if (e.detail.errMsg === 'getPhoneNumber:ok') {
          // 处理获取到的手机号加密数据
          console.log(e.detail.encryptedData, e.detail.iv);
        } else {
          // 用户拒绝授权或其他错误
          console.error('获取手机号失败', e.detail.errMsg);
        }
      }
    }
    

3. 解密手机号失败

  • 原因: 解密手机号时可能使用了错误的密钥或加密数据。

  • 解决方法:

    • 确保解密时使用的 sessionKey 是正确的。
    • 确保 encryptedDataiv 是从 getPhoneNumber 事件中获取的。
    • 使用正确的解密算法进行解密。
    const CryptoJS = require('crypto-js'); // 引入解密库
    
    function decryptPhoneNumber(sessionKey, encryptedData, iv) {
      const key = CryptoJS.enc.Base64.parse(sessionKey);
      const ivData = CryptoJS.enc.Base64.parse(iv);
      const encrypted = CryptoJS.enc.Base64.parse(encryptedData);
    
      const decrypted = CryptoJS.AES.decrypt(
        { ciphertext: encrypted },
        key,
        { iv: ivData, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }
      );
    
      return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
    }
    

4. sessionKey 过期

  • 原因: sessionKey 可能会过期,导致解密失败。

  • 解决方法:

    • 在获取手机号之前,确保 sessionKey 是有效的。
    • 如果 sessionKey 过期,重新调用 wx.login 获取新的 code,然后请求服务器获取新的 sessionKey
    wx.login({
      success(res) {
        if (res.code) {
          // 将 code 发送到服务器,获取新的 sessionKey
          uni.request({
            url: 'https://your-server.com/login',
            method: 'POST',
            data: { code: res.code },
            success: (res) => {
              const sessionKey = res.data.sessionKey;
              // 保存 sessionKey
            }
          });
        } else {
          console.error('登录失败', res.errMsg);
        }
      }
    });
    

5. 未配置 AppID 或 AppSecret

  • 原因: 在使用微信登录时,未正确配置 AppID 或 AppSecret。

  • 解决方法:

    • 确保在微信开放平台或小程序管理后台正确配置了 AppID 和 AppSecret。
    • 在 uni-app 项目中,确保 manifest.json 中的微信配置正确。
    {
      "mp-weixin": {
        "appid": "your-app-id",
        "secret": "your-app-secret"
      }
    }
回到顶部