uni-app中uni.login is not a function

发布于 1周前 作者 eggper 来自 Uni-App

uni-app中uni.login is not a function

示例代码:

uni.login({  
  provider: 'alipay',  
  scopes: 'auth_user',  
  success: async (res) => {  
    const code = res.code  
    await loginByAuthCode(code, 1)  
    resolve(true)  
  },  
  fail: (e) => {  
    console.log('支付宝登录失败', e)  
    uni.showModal({  
      title: '提示',  
      content: '取消授权可能使部分功能无法正常使用,是否重新授权?',  
      confirmText: '重新授权',  
      cancelText: '取消',  
      success: async function (res) {  
        if (res.confirm) {  
          console.log('用户点击确定')  
          await aliPayLogin()  
        } else if (res.cancel) {  
          console.log('用户点击取消')  
          resolve(false)  
        }  
      },  
      fail: (e) => {  
        console.log('支付宝登录失败', e)  
        resolve(false)  
      }  
    })  
  }  
})  

操作步骤:

如上

预期结果:

正常使用

实际结果:

UnhandledPromiseRejection: TypeError: common_vendor.index.login is not a function
17:47:46.045 at ../../../../../../../d:/workspace/chc-app/unpackage/dist/dev/.sourcemap/mp-alipay/common/request.js:159:4
17:47:46.045 157|    console.log('支付宝小程序登录')
17:47:46.045 158|    return new Promise((resolve, reject) => {
17:47:46.045 159|      uni.login({
17:47:46.045    |      ^^^^^^^^^^^
17:47:46.045 160|        provider: 'alipay',
17:47:46.046 161|        scopes: 'auth_user',

bug描述:

支付宝小程序中调用uni.login 报错,common_vendor.index.login is not a function,之前还可以用,调用代码如下所示:


2 回复

hbuilder换4.36好了


在uni-app中遇到“uni.login is not a function”的错误,通常意味着你尝试调用的uni.login方法并不存在于uni-app的API中。实际上,uni-app本身并没有直接提供一个名为uni.login的API用于用户登录。用户登录功能通常需要集成具体的登录服务,如微信登录、微博登录、自定义账号登录等。

以下是一个基于微信小程序的登录流程示例,使用uni-app框架和微信提供的登录API。如果你希望在其他平台上实现类似的登录功能,你需要参考相应平台的文档并进行调整。

步骤1:配置微信登录信息

manifest.json中配置微信小程序的AppID:

{
  "mp-weixin": {
    "appid": "你的微信小程序AppID"
  }
}

步骤2:调用微信登录接口

在需要进行登录的页面或组件中,使用微信提供的登录API。注意,这里使用的是wx.login而不是uni.login,因为uni.login并不存在。

// 假设这是一个uni-app页面中的方法
methods: {
  async login() {
    try {
      const res = await wx.login({
        success(res) {
          if (res.code) {
            // 发送 res.code 到后台换取 openId, sessionKey, unionId
            uni.request({
              url: 'https://你的服务器地址/login', // 后台接口
              method: 'POST',
              data: {
                code: res.code
              },
              success: (loginRes) => {
                // 保存登录状态,如token等
                const { token } = loginRes.data;
                uni.setStorageSync('token', token);
                console.log('登录成功', token);
              },
              fail: (err) => {
                console.error('登录失败', err);
              }
            });
          } else {
            console.log('登录失败!' + res.errMsg);
          }
        }
      });
    } catch (err) {
      console.error('调用wx.login失败', err);
    }
  }
}

注意

  • wx.login是微信小程序提供的API,如果你在H5、App等其他平台运行,需要使用相应的平台登录API。
  • 登录成功后,服务器应返回如token等凭证,客户端需要妥善保存这些凭证用于后续请求的身份验证。
  • uni.request用于向服务器发送请求,这里用于将微信登录获取的code发送到你的服务器以换取用户的openId等信息。

希望这个示例能帮助你理解如何在uni-app中实现登录功能。如果你使用的是其他登录服务,请参考相应的文档进行实现。

回到顶部