1
This commit is contained in:
@ -10,10 +10,12 @@ import (
|
||||
"go-admin/common/helper"
|
||||
cModels "go-admin/common/models"
|
||||
statuscode "go-admin/common/status_code"
|
||||
"go-admin/config"
|
||||
"go-admin/pkg/cryptohelper/inttostring"
|
||||
"go-admin/pkg/cryptohelper/jwthelper"
|
||||
"go-admin/pkg/cryptohelper/md5helper"
|
||||
"go-admin/pkg/emailhelper"
|
||||
"go-admin/pkg/utility"
|
||||
"time"
|
||||
|
||||
"github.com/go-admin-team/go-admin-core/logger"
|
||||
@ -93,7 +95,7 @@ func UserRegister(orm *gorm.DB, registerInfo sysmodel.FrontedUserRegisterReq) (i
|
||||
Password: registerInfo.Password,
|
||||
Salt: inttostring.GenerateRandomString(6),
|
||||
Email: registerInfo.Email,
|
||||
InviteCode: inttostring.NewNumberInvite().Encode(int(time.Now().Unix())),
|
||||
InviteCode: inttostring.NewNumberInvite().GenerateRandomCode(int(time.Now().Unix())),
|
||||
Loginip: registerInfo.IP,
|
||||
Mobile: registerInfo.Phone,
|
||||
Area: registerInfo.PhoneAreaCode,
|
||||
@ -115,6 +117,7 @@ func UserRegister(orm *gorm.DB, registerInfo sysmodel.FrontedUserRegisterReq) (i
|
||||
user.Nickname = user.Mobile
|
||||
}
|
||||
|
||||
user.Nickname, _ = utility.GenerateUniqueNickname()
|
||||
user.CreatedAt = time.Now()
|
||||
user.Password = md5helper.MD5(registerInfo.Password + user.Salt)
|
||||
// 开启事务
|
||||
@ -149,7 +152,7 @@ func UserRegister(orm *gorm.DB, registerInfo sysmodel.FrontedUserRegisterReq) (i
|
||||
|
||||
//发送邮箱
|
||||
emailCode := inttostring.GenerateRandomString(10)
|
||||
go SendRegisterEmail(registerInfo.Email, emailCode)
|
||||
go SendRegisterEmail(registerInfo.Email, emailCode, 0, registerInfo.Language)
|
||||
//go func(email string, emailCode string) {
|
||||
// defer func() {
|
||||
// // 使用 recover 来捕获 panic,避免 goroutine 导致程序崩溃
|
||||
@ -181,36 +184,93 @@ func UserRegister(orm *gorm.DB, registerInfo sysmodel.FrontedUserRegisterReq) (i
|
||||
return statuscode.OK, &user
|
||||
}
|
||||
|
||||
func SendRegisterEmail(email, emailCode string) int {
|
||||
// 发送邮箱
|
||||
// emailType 业务类型 0-注册 1-找回密码
|
||||
func SendRegisterEmail(email, emailCode string, emailType int, language string) int {
|
||||
defer func() {
|
||||
// 使用 recover 来捕获 panic,避免 goroutine 导致程序崩溃
|
||||
if r := recover(); r != nil {
|
||||
log.Error("SendRegisterEmail Error:", r)
|
||||
}
|
||||
}()
|
||||
get := helper.DefaultRedis.Get(fmt.Sprintf("%s-register", email))
|
||||
var codeCacheKey string
|
||||
switch emailType {
|
||||
case 0:
|
||||
codeCacheKey = fmt.Sprintf("%s-register", email)
|
||||
case 1:
|
||||
codeCacheKey = fmt.Sprintf("%s-reset_pwd", email)
|
||||
default:
|
||||
logger.Error("emailType error")
|
||||
return statuscode.ServerError
|
||||
}
|
||||
|
||||
get := helper.DefaultRedis.Get(codeCacheKey)
|
||||
if get.Val() != "" { //说明邮箱操作频繁
|
||||
return statuscode.EmailOrderTooOften
|
||||
}
|
||||
key := fmt.Sprintf(rediskey.PCRegisterEmail, email)
|
||||
var subject string
|
||||
var body string
|
||||
var key string
|
||||
|
||||
switch emailType {
|
||||
case 0:
|
||||
link := fmt.Sprintf("%s/verify?email=%s&verify_code=%s&type=register", config.ExtConfig.Domain, email, emailCode)
|
||||
// 创建邮件消息
|
||||
key = fmt.Sprintf(rediskey.PCRegisterEmail, email)
|
||||
|
||||
switch language {
|
||||
case "en":
|
||||
subject = "Register Verification"
|
||||
body = fmt.Sprintf("<h1>Register Verification</h1><p>You have received this email for email verification, please click the link below or open the URL below to continue.</p> %s </p>", link)
|
||||
default:
|
||||
subject = "注册验证"
|
||||
body = fmt.Sprintf("<h1>注册验证</h1><p>您收到此电子邮件,用于进行邮箱验证,请点击下面的链接或打开下面的网址继续。</p> %s </p>", link)
|
||||
}
|
||||
case 1:
|
||||
key = fmt.Sprintf(rediskey.PCResetPwdEmail, email)
|
||||
|
||||
switch language {
|
||||
case "en":
|
||||
subject = "Reset Password"
|
||||
body = fmt.Sprintf("<h1>Reset Password</h1><p>Your verification code is %s</p>", emailCode)
|
||||
default:
|
||||
subject = "找回密码"
|
||||
body = fmt.Sprintf("<h1>验证码</h1><p>您的验证码 %s</p> ", emailCode)
|
||||
}
|
||||
|
||||
default:
|
||||
logger.Error("发送邮件类型错误")
|
||||
return statuscode.ServerError
|
||||
}
|
||||
|
||||
if err := helper.DefaultRedis.SetStringExpire(key, emailCode, time.Second*300); err != nil {
|
||||
log.Error("sendEmail setRedis Error:", zap.Error(err))
|
||||
return statuscode.ServerError
|
||||
}
|
||||
|
||||
err2 := emailhelper.SendFrontedEmail(email, emailCode)
|
||||
err2 := emailhelper.SendFrontedEmail(email, emailCode, subject, body)
|
||||
if err2 != nil {
|
||||
log.Error("sendEmail server Error:", zap.Error(err2))
|
||||
return statuscode.ServerError
|
||||
}
|
||||
//记录邮箱发送
|
||||
helper.DefaultRedis.SetStringExpire(fmt.Sprintf("%s-register", email), "register", time.Second*60)
|
||||
helper.DefaultRedis.SetStringExpire(codeCacheKey, "1", time.Second*60)
|
||||
return statuscode.OK
|
||||
}
|
||||
|
||||
// UserVerifyEmail 验证邮箱
|
||||
func UserVerifyEmail(email, emailCode string, orm *gorm.DB) (code int) {
|
||||
key := fmt.Sprintf(rediskey.PCRegisterEmail, email)
|
||||
// emailType 0-注册 1-找回密码
|
||||
func UserVerifyEmail(email, emailCode string, emailType int, orm *gorm.DB) (code int) {
|
||||
var key string
|
||||
switch emailType {
|
||||
case 0:
|
||||
key = fmt.Sprintf(rediskey.PCRegisterEmail, email)
|
||||
case 1:
|
||||
key = fmt.Sprintf(rediskey.PCResetPwdEmail, email)
|
||||
default:
|
||||
return statuscode.ServerError
|
||||
|
||||
}
|
||||
get := helper.DefaultRedis.Get(key)
|
||||
if get.Val() == "" {
|
||||
return statuscode.EmailNotExistOrEmailCOdeExpired
|
||||
|
||||
Reference in New Issue
Block a user