// 小程序登录
AV.User.loginWithWeapp().then(user => {
  // 设置并保存手机号
  user.setMobilePhoneNumber('13000000000');
  return user.save();
}).then(user => {
  // 发送验证短信
  AV.User.requestMobilePhoneVerify(user.getMobilePhoneNumber());
}).then({
  // 用户填写收到短信验证码后再调用 AV.User.verifyMobilePhone(code) 完成手机号的绑定
  // 成功后用户将可以在其他平台上使用手机号动态验证码登录了
}).catch(console.error);

以上是官方文档说法,但没有写明如果验证短信验证码的有效性,AV.User.verifyMobilePhone(6位验证码) 提示400错误

请检查一下,是否在应用设置里开启了「启用通用的短信验证码服务」「用户注册时,向手机号码发送短信」

已经启用了,而且我看启用的那两个requestSmsCode 和 verifySmsCode接口,和文档里写的verifyMobilePhone名字就不一样了

不好意思,上面说错了,是启用「用户注册时,向手机号码发送短信」,你已经启用了。

我试了是可以验证成功的,如果 400 了,请把 400 的请求的完整 headers 贴一下,像这样:

我注意到你的 User 表的 find 权限设置为不允许任何人读写。我调查一下是否有关。

我把 find 权限设置设置为所有人,也是同样的400错误

而且我发现有一个现象,就是我点击一次获取验证码,但是有时候就会收到2条短信

您好,请问能够找到原因么?好像我调用云函数,也是报这个错

你好,我这边也出现了这个错误,验证的时候出现400,请问如何解决

你这里好像是使用了 test phone ,用户里的 mobilePhoneNumber 必须和返回的 test phone 一致才行。

恩,感谢回复,我一直没有返回手机号码,自己的理解可能有问题或者是文档的误导

因为我们要对手机号的合法性做验证,且需要判断是否为国际号码,所以 测试手机号 统一使用了 「国际区号+手机号码的格式」 比如您填入的手机号码时 186xxxxxxxx 我们会自动转化为 +86186xxxxxxxx (因为中国的国际区号是 +86) 您在使用 测试手机号 作为用户的 mobilePhoneNumber 时,同样需要指定为 +86186xxxxxxxx

多谢解答,已经解决了