101 lines
2.4 KiB
Go
101 lines
2.4 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"main/configs"
|
|
"math/rand"
|
|
"net/smtp"
|
|
"time"
|
|
|
|
"github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi"
|
|
)
|
|
|
|
type Code struct {
|
|
Email string `json:"email"`
|
|
Mobile string `json:"mobile"`
|
|
Code string `json:"code"`
|
|
Expire time.Time `json:"expire"`
|
|
}
|
|
|
|
func init() {
|
|
configs.ORMDB().AutoMigrate(&Code{})
|
|
}
|
|
|
|
func CodeCreate(email, mobile string) (err error) {
|
|
code := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000))
|
|
// 如果是邮箱,发送邮件
|
|
if email != "" {
|
|
message := `
|
|
To: xxx@qq.com
|
|
From: 发送邮件的人名称
|
|
Subject: 使用Golang发送邮件
|
|
Content-Type: text/html; charset=UTF-8
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="iso-8859-15">
|
|
<title>MMOGA POWER</title>
|
|
</head>
|
|
<body>
|
|
您的验证码: 123456
|
|
</body>
|
|
</html>
|
|
`
|
|
// 发送邮件到邮箱
|
|
auth := smtp.PlainAuth("", "admin@mochu.art", "password", "smtpdm.aliyun.com")
|
|
if err := smtp.SendMail("smtpdm.aliyun.com:80", auth, "admin@mochu.art", []string{"xxx@qq.com"}, []byte(message)); err != nil {
|
|
//发送邮件失败
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
}
|
|
// 如果是手机,发送短信
|
|
if mobile != "" {
|
|
// 发送短信
|
|
client, err := dysmsapi.NewClientWithAccessKey("cn-hangzhou", "your-access-key-id", "your-access-key-secret")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
request := dysmsapi.CreateSendSmsRequest()
|
|
request.Scheme = "https"
|
|
request.PhoneNumbers = mobile
|
|
request.SignName = "Mochu"
|
|
request.TemplateCode = "SMS_123456"
|
|
request.TemplateParam = "{\"code\":\"" + code + "\"}"
|
|
response, err := client.SendSms(request)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return err
|
|
}
|
|
fmt.Println(response)
|
|
}
|
|
// 保存验证码
|
|
configs.ORMDB().Create(&Code{
|
|
Email: email,
|
|
Mobile: mobile,
|
|
Code: code,
|
|
Expire: time.Now().Add(time.Minute * 5),
|
|
})
|
|
return nil
|
|
}
|
|
|
|
func EmailCheck(email, code string) (err error) {
|
|
var data Code
|
|
configs.ORMDB().Where("email = ?", email).First(&data)
|
|
if data.Code == code && data.Expire.After(time.Now()) {
|
|
return nil
|
|
}
|
|
return fmt.Errorf("验证码错误")
|
|
}
|
|
|
|
func MobileCheck(mobile, code string) (err error) {
|
|
var data Code
|
|
configs.ORMDB().Where("mobile = ?", mobile).First(&data)
|
|
if data.Code == code && data.Expire.After(time.Now()) {
|
|
return nil
|
|
}
|
|
return fmt.Errorf("验证码错误")
|
|
}
|