```
feat(base): 添加邮箱注册码功能及用户注册接口 - 在 `sessionManager` 中新增邮件注册码缓存管理实例和相关方法 - 实现生成、保存、验证、删除邮件注册码的逻辑 - 新增 `/reg` 和 `/email` 接口用于用户注册和发送验证码 - 引入 `golang-lru` 依赖以支持限流缓存功能 - 调整包导入顺序,优化代码结构 ```
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
package share
|
||||
|
||||
import (
|
||||
"blazing/cool"
|
||||
"context"
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"blazing/cool"
|
||||
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
@@ -25,10 +27,19 @@ func newUserOnlineStore() *cacheStore[uint16] {
|
||||
}
|
||||
}
|
||||
|
||||
// newEmailCodeStore 创建邮件注册码缓存实例
|
||||
func newEmailCodeStore() *cacheStore[int] {
|
||||
return &cacheStore[int]{
|
||||
manager: cool.CacheManager,
|
||||
prefix: "blazing:email:code:",
|
||||
}
|
||||
}
|
||||
|
||||
// sessionManager 会话管理器
|
||||
type sessionManager struct {
|
||||
sessionStore *cacheStore[uint32] // 会话缓存
|
||||
userOnlineStore *cacheStore[uint16] // 用户在线状态缓存
|
||||
emailCodeStore *cacheStore[int] // 邮件注册码缓存
|
||||
}
|
||||
|
||||
// newSessionManager 创建会话管理器
|
||||
@@ -36,6 +47,7 @@ func newSessionManager() *sessionManager {
|
||||
return &sessionManager{
|
||||
sessionStore: newSessionStore(),
|
||||
userOnlineStore: newUserOnlineStore(),
|
||||
emailCodeStore: newEmailCodeStore(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,3 +90,40 @@ func (m *sessionManager) DeleteUserOnline(userID uint32) error {
|
||||
func (m *sessionManager) UserOnlineExists(userID uint32) (bool, error) {
|
||||
return m.userOnlineStore.Contains(context.Background(), gconv.String(userID))
|
||||
}
|
||||
|
||||
// generate6DigitCode 生成6位数字注册码(100000-999999)
|
||||
func (m *sessionManager) generate6DigitCode() int {
|
||||
// 初始化随机数生成器(确保每次调用生成不同序列)
|
||||
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
return r.Intn(900000) + 100000
|
||||
}
|
||||
|
||||
// SaveEmailCode 生成并保存邮件注册码(返回生成的验证码,支持设置过期时间)
|
||||
func (m *sessionManager) SaveEmailCode(email string, expire time.Duration) (int, error) {
|
||||
code := m.generate6DigitCode()
|
||||
return code, m.emailCodeStore.Set(gctx.New(), email, code, expire)
|
||||
}
|
||||
|
||||
// GetEmailCode 获取指定邮箱的注册码
|
||||
func (m *sessionManager) GetEmailCode(email string) (int, error) {
|
||||
return m.emailCodeStore.Get(context.Background(), email)
|
||||
}
|
||||
|
||||
// DeleteEmailCode 删除指定邮箱的注册码(验证成功后调用)
|
||||
func (m *sessionManager) DeleteEmailCode(email string) error {
|
||||
return m.emailCodeStore.Del(gctx.New(), email)
|
||||
}
|
||||
|
||||
// EmailCodeExists 检查指定邮箱是否存在有效的注册码
|
||||
func (m *sessionManager) EmailCodeExists(email string) (bool, error) {
|
||||
return m.emailCodeStore.Contains(context.Background(), email)
|
||||
}
|
||||
|
||||
// VerifyEmailCode 验证用户输入的注册码是否正确
|
||||
func (m *sessionManager) VerifyEmailCode(email string, inputCode int) (bool, error) {
|
||||
storedCode, err := m.GetEmailCode(email)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return storedCode == inputCode, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user