短信验证
需选择一家可靠的短信服务提供商,服务提供商通常提供API来集成短信功能到您的应用程序中,不同的提供商提供不同SDK或库。
后端实现
安装相应的短信SDK或库,以便与短信服务提供商的API进行通信。
创建一个后端API,接收来自前端的手机号码和其他必要的注册信息。
在后端API中,生成一个随机验证码并将其保存到数据库或缓存中,同时将手机号码和验证码发送到短信服务提供商的API。
验证短信服务提供商的响应,确认短信已成功发送。
协商接口
- 请求需校验信息(图形/数据库已有信息),响应成功后才可进行下一步
- 信息正确,请求提交手机号,后端生成发送短信的随机验证码,存储于缓存/数据库,调用短信提供商发送短信API携带手机号&验证码,提供商响应服务器成功与否,再响应客户端短信是否发送
- 客户端收到短信,填入所需信息,提交请求携带验证码&所需信息,后端对比验证码成功,才可完成注册/信息插入,响应结果
前后端交互
- 在注册页面或组件中,添加一个用于输入用户收到的验证码的字段。
- 通过AJAX或AXIOS方式,将用户输入的手机号码和验证码包含在请求中,向后端API发送注册请求。
- 用户提交表单后,后端API将提交的验证码与后端存储的验证码进行比较。
- 如果验证码匹配,则调用提供商API;否则,显示相应的错误消息。
- 后端调用API,API中先接收到服务商的响应,后发送给前端短信是否已发送响应,根据成功或失败的情况向用户显示适当的消息。
注意事项
- 确保您的短信服务提供商具有适当的安全措施,以防止滥用和恶意行为。
- 对于敏感操作(如密码重置等),应采用额外的安全措施,如双因素身份验证。
腾讯
参考:
GitHub-TencentCloud:tencentcloud-sdk-python
腾讯云-文档中心:短信
腾讯云-云API:API Explorer
开通步骤详见:国内短信快速入门
依赖
1 2 3
| # 猜测此依赖是用来做安全、认证相关 pip install --upgrade tencentcloud-sdk-python pip install tencentcloud-sdk-python-sms
|
发送短信
进入腾讯云-云API:API Explorer短信,根据表单提示填入短信套餐信息、模板等信息,可自动生成各种代码的实现、params
内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| import json from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException from tencentcloud.sms.v20210111 import sms_client, models try: cred = credential.Credential("SecretId", "SecretKey") httpProfile = HttpProfile() httpProfile.endpoint = "sms.tencentcloudapi.com" clientProfile = ClientProfile() clientProfile.httpProfile = httpProfile client = sms_client.SmsClient(cred, "ap-beijing", clientProfile)
req = models.SendSmsRequest() params = { "PhoneNumberSet": [mobile], "SmsSdkAppId": "1400111111", "SignName": "***科技有限公司", "TemplateId": "1811111", "TemplateParamSet": [code, time], "SessionContext": "UserID" } req.from_json_string(json.dumps(params))
resp = client.SendSms(req) print(resp.to_json_string())
except TencentCloudSDKException as err: print(err)
|
参考代码
创建一个发送短信的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| pythonCopy codedef send_sms(mobile, code): app_id = 'YOUR_APP_ID' app_key = 'YOUR_APP_KEY' template_id = 123456
sender = SmsSingleSender(app_id, app_key) params = [code, '5']
try: result = sender.send_with_param(86, mobile, template_id, params) if result.result == 0: return True else: return False except Exception as e: print(str(e)) return False
|
创建一个API端点,用于接收手机号码并发送短信:
1 2 3 4 5 6 7 8 9 10 11 12 13
| pythonCopy codefrom django.http import JsonResponse
def send_sms_code(request): mobile = request.GET.get('mobile') code = generate_random_code()
if send_sms(mobile, code): save_code_to_database(mobile, code) return JsonResponse({'success': True, 'message': '短信发送成功'}) else: return JsonResponse({'success': False, 'message': '短信发送失败'})
|