go 实现发送短信验证码登录

本文介绍了如何使用Go语言和Gin框架实现手机短信验证码登录的功能。首先,需要在腾讯云等服务商处申请短信服务并配置相关参数。接着,通过Viper加载配置文件,初始化发送短信的客户端。然后,定义发送验证码的请求结构体,并使用函数式选项模式进行初始化。最后,创建发送验证码的控制层,发送验证码并将其保存到Redis缓存中,以供后续登录验证使用。

现在大多数app或wap都实现了通过手机号获取验证码进行验证登录,下面来看下用go来实现手机号发送短信验证码登录的过程,基于的框架是gin 。

  • 首先是短信服务商的申请,比如腾讯云、阿里云、网易易盾等,腾讯云自己申请个微信公众号就行,然后申请相关的短信签名、和短信模板,腾讯有100条试用喔。
  • 具体的代码实现
  • 配置腾讯云短信服务的发送短信相关配置,具体可以参考腾讯云短信服务的api 文档,进行配置
sms:
  secret-key:  #秘钥,可在控制台查询
  secret-id:  #秘钥id ,可在控制台查询
  sms-sdk-app-id:  #应用id
  Sign-name:  #申请的签名
  template-id:  #模板id

go 这里采用的是viper进行加载配置,相关的加载配置代码如下
定义相关的配置结构体,并加载到整个项目的总的options 配置结构体中

// sms 发送短信的配置options
type SmsOptions struct {
   
   
	SecretKey   string `json:"secret-key,omitempty" mapstructure:"secret-key"`
	SecretId    string `json:"secret-id,omitempty" mapstructure:"secret-id"`
	SmsSdkAppId string `json:"sms-sdk-app-id,omitempty" mapstructure:"sms-sdk-app-id"`
	SignName    string `json:"sign-name,omitempty" mapstructure:"sign-name"`
	TemplateId  string `json:"template-id,omitempty" mapstructure:"template-id"`
}

func NewSmsOptions() *SmsOptions {
   
   
	return &SmsOptions{
   
   
		SecretKey:   "",
		SecretId:    "",
		SmsSdkAppId: "",
		SignName:    "",
		TemplateId:  "",
	}
}
// 这为项目总的一个options配置,项目启动的时候会将yaml中的加载到option中
type Options struct {
   
   
	GenericServerRunOptions *genericoptions.ServerRunOptions `json:"server" mapstructure:"server"`
	MySQLOptions *genericoptions.MySQLOptions `json:"mysql" mapstructure:"mysql"`
	InsecuresServing *genericoptions.InsecureServerOptions `json:"insecure" mapstructure:"insecure"`
	Log *logger.Options `json:"log" mapstructure:"log"`
	RedisOptions *genericoptions.RedisOptions `json:"redis" mapstructure:"redis"`
	SmsOptions *genericoptions.SmsOptions `json:"sms" mapstructure:"sms"`
}

func NewOptions() *Options  {
   
   
	o:=Options{
   
   
		GenericServerRunOptions: genericoptions.NewServerRunOptions(),
		MySQLOptions: genericoptions.NewMySQLOptions(),
		InsecuresServing: genericoptions.NewInsecureServerOptions(),
		RedisOptions: genericoptions.NewRedisOptions(),
		Log: logger.NewOptions(),
		SmsOptions: genericoptions.NewSmsOptions(),

	}
	return &o
}

viper加载配置的代码如下

func AddConfigToOptions(options *options.Options) error {
   
   
	viper
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值