From 6fe75cf9c8c482630b57b21191a2ce6ef353a6f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=9C=E8=8F=AF?= Date: Wed, 23 Aug 2023 20:07:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=AA=8C=E8=AF=81=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 3 +++ models/code.go | 19 +++++++++++++++++-- routers/codes.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 routers/codes.go diff --git a/main.go b/main.go index 6828a8f..fa5d309 100644 --- a/main.go +++ b/main.go @@ -43,6 +43,9 @@ func main() { r.HandleFunc("/api/sessions/{id}", routers.SessionsItemPatch).Methods("PATCH") r.HandleFunc("/api/sessions/{id}", routers.SessionsItemDelete).Methods("DELETE") + r.HandleFunc("/api/codes", routers.CodesGet).Methods("GET") // 获取验证码列表 + r.HandleFunc("/api/codes", routers.CodesPost).Methods("POST") // 创建一条验证码 + r.HandleFunc("/api/users", routers.UsersGet).Methods("GET") // 获取用户列表 r.HandleFunc("/api/users", routers.UsersPost).Methods("POST") // 创建一条用户 r.HandleFunc("/api/users/{id}", routers.UsersItemGet).Methods("GET") // 获取一条用户 diff --git a/models/code.go b/models/code.go index e858985..890d06b 100644 --- a/models/code.go +++ b/models/code.go @@ -18,15 +18,30 @@ func init() { configs.ORMDB().AutoMigrate(&Code{}) } -func CodeCreate(email, mobile string) string { +func CodeCreate(email, mobile string) (err error) { code := fmt.Sprintf("%06v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(1000000)) + // 如果是邮箱,发送邮件 + if email != "" { + go func() { + // 发送邮件 + // ... + }() + } + // 如果是手机,发送短信 + if mobile != "" { + go func() { + // 发送短信 + // ... + }() + } + // 保存验证码 configs.ORMDB().Create(&Code{ Email: email, Mobile: mobile, Code: code, Expire: time.Now().Add(time.Minute * 5), }) - return code + return nil } func EmailCheck(email, code string) (err error) { diff --git a/routers/codes.go b/routers/codes.go new file mode 100644 index 0000000..a858aa7 --- /dev/null +++ b/routers/codes.go @@ -0,0 +1,46 @@ +package routers + +import ( + "encoding/json" + "io" + "main/configs" + "main/models" + "main/utils" + "net/http" +) + +// 获取验证码列表(仅限管理员) +func CodesGet(w http.ResponseWriter, r *http.Request) { + var listview models.ListView + listview.Page = utils.ParamInt(r.URL.Query().Get("page"), 1) + listview.PageSize = utils.ParamInt(r.URL.Query().Get("pageSize"), 20) + var codes []models.Code + configs.ORMDB().Offset((listview.Page - 1) * listview.PageSize).Limit(listview.PageSize).Find(&codes).Count(&listview.Total) + listview.List = codes + listview.Next = listview.Page*listview.PageSize < int(listview.Total) + listview.WriteJSON(w) +} + +// 创建验证码 +func CodesPost(w http.ResponseWriter, r *http.Request) { + // 从body取得参数 email mobile 和 code + var code models.Code + body, err := io.ReadAll(r.Body) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer r.Body.Close() + if err := json.Unmarshal(body, &code); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + // 创建验证码 + if err := models.CodeCreate(code.Email, code.Mobile); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + // 返回成功 + w.WriteHeader(http.StatusCreated) + w.Write([]byte("验证码已发送")) +}