uni-app uniID.loginBySms一直提示短信验证码错误或已失效
uni-app uniID.loginBySms一直提示短信验证码错误或已失效
操作步骤:
const params = {
mobile,
templateId,
type:'login',
code
}
const res = await uniID.sendSmsCode(params)
const res = await uniID.verifyCode(params)
console.log(res);
const res1 = await uniID.loginBySms(params)
console.log(res1);
return res1
预期结果:
uniID.loginBySms正常返回
实际结果:
uniID.loginBySms返回
```plaintext
```json
{
"code": 50202,
"errCode": "uni-id-invalid-verify-code",
"errMsg": "短信验证码错误或已失效",
"msg": "短信验证码错误或已失效",
"message": "短信验证码错误或已失效"
}
bug描述:
需求是使用短信验证码登录,用云函数uniID的方式(非uni-id-co,因为用这个很不爽),使用uniID.sendSmsCode发送验证码,但是uniID.verifyCode可以验证通过,uniID.loginBySms却提示“短信验证码错误或已失效”,opendb-verify-codes表也生成记录了,时间也是正确的
6 回复
注意验证码只能使用一次,你这段你代码里面verifyCode和loginSms都会校验验证码,导致后校验的不通过。如果你是想排查仅调用loginBySms也不通过的问题,建议看下验证码的使用场景传的对不对
我也明白验证一次就会失效。就是因为一直失败,才有了verifyCode这段代码,想知道验证的时候是否正常
回复 4***@qq.com: “建议看下验证码的使用场景传的对不对”
https://uniapp.dcloud.net.cn/uniCloud/uni-id/old.html#sendsmscode 你用的是uni-id公共模块,看看你发短信的时候传的type对不对
回复 4***@qq.com: 请问解决了吗;跟你一样
在使用 uni-app
的 uniID.loginBySms
方法时,如果一直提示“短信验证码错误或已失效”,可能是以下几个原因导致的。你可以根据这些原因逐一排查问题:
1. 验证码未正确发送或接收
- 问题:用户可能没有正确接收到短信验证码,或者输入的验证码与服务器发送的不一致。
- 解决方案:
- 确保用户输入的验证码与接收到的验证码一致。
- 检查短信发送服务是否正常工作,确保验证码能够成功发送到用户手机。
2. 验证码过期
- 问题:短信验证码通常有一个有效期(如5分钟),如果用户输入时验证码已经过期,就会提示错误。
- 解决方案:
- 确保用户在验证码有效期内输入。
- 如果验证码过期,重新获取新的验证码。
3. 验证码未正确存储或匹配
- 问题:服务器可能没有正确存储验证码,或者在验证时没有正确匹配。
- 解决方案:
- 检查服务器端验证码的存储逻辑,确保验证码在发送后被正确存储。
- 确保在验证时,服务器能够正确匹配用户输入的验证码。
4. 请求参数错误
- 问题:在调用
uniID.loginBySms
时,可能传递的参数不正确,如手机号、验证码等。 - 解决方案:
- 检查调用
uniID.loginBySms
时传递的参数是否正确,特别是mobile
和code
参数。 - 确保手机号和验证码的格式正确。
- 检查调用
5. 服务器端配置问题
- 问题:服务器端的短信验证码服务可能配置不正确,导致验证码无法正确验证。
- 解决方案:
- 检查服务器端的短信验证码服务配置,确保其正常工作。
- 查看服务器日志,排查是否有错误信息。
6. 网络问题
- 问题:网络延迟或中断可能导致验证码验证失败。
- 解决方案:
- 确保网络连接正常,尤其是在验证码验证时。
- 如果网络不稳定,建议用户重试。
7. 代码逻辑问题
- 问题:客户端或服务器端的代码逻辑可能存在问题,导致验证码验证失败。
- 解决方案:
- 检查客户端和服务器端的代码逻辑,确保验证码的发送、存储和验证流程正确。
- 可以通过调试工具逐步排查问题。
8. uniID 版本问题
- 问题:使用的
uniID
版本可能存在 bug 或不兼容问题。 - 解决方案:
- 确保使用的是最新版本的
uniID
。 - 查看官方文档或社区,确认是否有已知问题或更新。
- 确保使用的是最新版本的
9. 短信服务商问题
- 问题:短信服务商可能存在问题,导致验证码无法正确发送或验证。
- 解决方案:
- 联系短信服务商,确认服务是否正常。
- 检查短信服务商的 API 调用是否成功。
10. 用户输入错误
- 问题:用户可能输入了错误的验证码。
- 解决方案:
- 提示用户仔细检查输入的验证码,确保无误。
- 提供重新获取验证码的选项。
示例代码
以下是一个简单的 uniID.loginBySms
调用示例:
uniID.loginBySms({
mobile: '13800138000', // 用户手机号
code: '123456' // 用户输入的验证码
}).then(res => {
console.log('登录成功', res);
}).catch(err => {
console.error('登录失败', err);
});