创建验证码

This commit is contained in:
2023-08-23 20:07:56 +08:00
parent 2568659a45
commit 6fe75cf9c8
3 changed files with 66 additions and 2 deletions

View File

@@ -43,6 +43,9 @@ func main() {
r.HandleFunc("/api/sessions/{id}", routers.SessionsItemPatch).Methods("PATCH") r.HandleFunc("/api/sessions/{id}", routers.SessionsItemPatch).Methods("PATCH")
r.HandleFunc("/api/sessions/{id}", routers.SessionsItemDelete).Methods("DELETE") 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.UsersGet).Methods("GET") // 获取用户列表
r.HandleFunc("/api/users", routers.UsersPost).Methods("POST") // 创建一条用户 r.HandleFunc("/api/users", routers.UsersPost).Methods("POST") // 创建一条用户
r.HandleFunc("/api/users/{id}", routers.UsersItemGet).Methods("GET") // 获取一条用户 r.HandleFunc("/api/users/{id}", routers.UsersItemGet).Methods("GET") // 获取一条用户

View File

@@ -18,15 +18,30 @@ func init() {
configs.ORMDB().AutoMigrate(&Code{}) 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)) 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{ configs.ORMDB().Create(&Code{
Email: email, Email: email,
Mobile: mobile, Mobile: mobile,
Code: code, Code: code,
Expire: time.Now().Add(time.Minute * 5), Expire: time.Now().Add(time.Minute * 5),
}) })
return code return nil
} }
func EmailCheck(email, code string) (err error) { func EmailCheck(email, code string) (err error) {

46
routers/codes.go Normal file
View File

@@ -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("验证码已发送"))
}