1、增加注册

This commit is contained in:
2025-07-18 18:05:56 +08:00
parent 8703d49fe0
commit 398b8af489
7 changed files with 172 additions and 17 deletions

View File

@ -133,7 +133,7 @@ func (e SysUser) Register(c *gin.Context) {
s := service.SysUser{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req, binding.JSON).
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
@ -142,18 +142,19 @@ func (e SysUser) Register(c *gin.Context) {
return
}
code, err := s.Register(&req)
if err != nil {
e.Logger.Error(err)
e.Error(500, nil, err.Error())
return
} else if code != statuscode.Success {
if code := req.Validate(); code != statuscode.Success {
e.Error(code, nil, statuscode.GetMsg(code, req.Lang))
return
}
e.OK(nil, statuscode.GetMsg(code, req.Lang))
result, code := s.Register(&req)
if code != statuscode.Success {
e.Error(code, nil, statuscode.GetMsg(code, req.Lang))
return
}
e.OK(result, statuscode.GetMsg(code, req.Lang))
}
// Update

View File

@ -60,6 +60,7 @@ func sysSwaggerRouter(r *gin.RouterGroup) {
}
func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
api := apis.SysUser{}
wss := r.Group("").Use(authMiddleware.MiddlewareFunc())
{
wss.GET("/ws/:id/:channel", ws.WebsocketManager.WsClient)
@ -71,6 +72,7 @@ func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
v1.POST("/login", authMiddleware.LoginHandler)
// Refresh time can be longer than token timeout
v1.GET("/refresh_token", authMiddleware.RefreshHandler)
v1.POST("signup", api.Register)
}
registerBaseRouter(v1, authMiddleware)
}

View File

@ -2,9 +2,14 @@ package dto
import (
"go-admin/app/admin/models"
"go-admin/utils/utility"
"strings"
"go-admin/common/dto"
common "go-admin/common/models"
"go-admin/common/statuscode"
"github.com/go-admin-team/go-admin-core/sdk/pkg/captcha"
)
type SysUserGetPageReq struct {
@ -106,10 +111,43 @@ type SysUserInsertReq struct {
}
type RegisterReq struct {
Lang string `json:"lang" `
Email string `json:"email" comment:"邮箱" vd:"len($)>0,email"`
PassWord string `json:"password" comment:"密码" vd:"len($)>0"`
ConfirmPassword string `json:"confirmPassword" comment:"确认密码" vd:"len($)>0"`
Lang string `json:"lang" form:"lang"`
Email string `json:"email" form:"email" comment:"邮箱"`
PassWord string `json:"pwd" form:"pwd" comment:"密码"`
ConfirmPassword string `json:"kwd" form:"kwd" comment:"确认密码"`
UUID string `json:"uuid" form:"uuid"`
Code string `json:"code" form:"code"`
}
func (e *RegisterReq) Validate() int {
if e.Email == "" {
return statuscode.EmailEmpty
}
if e.Email != "" && !utility.IsValidEmail(e.Email) {
return statuscode.EmailFormatError
}
e.PassWord = strings.TrimSpace(e.PassWord)
e.ConfirmPassword = strings.TrimSpace(e.ConfirmPassword)
if e.PassWord == "" {
return statuscode.PasswordEmpty
}
if e.ConfirmPassword == "" {
return statuscode.ConfirmPasswordEmpty
}
if e.PassWord != e.ConfirmPassword {
return statuscode.PassWordNotMatch
}
if !captcha.Verify(e.UUID, e.Code, true) {
return statuscode.VerifyCodeError
}
return statuscode.Success
}
func (s *SysUserInsertReq) Generate(model *models.SysUser) {
@ -194,3 +232,8 @@ type PassWord struct {
NewPassword string `json:"newPassword" vd:"len($)>0"`
OldPassword string `json:"oldPassword" vd:"len($)>0"`
}
type SysUserRegisterResp struct {
Token string `json:"token"`
Expire int `json:"expire"`
}

View File

@ -4,10 +4,13 @@ import (
"errors"
"go-admin/app/admin/models"
"go-admin/app/admin/service/dto"
"time"
log "github.com/go-admin-team/go-admin-core/logger"
"github.com/go-admin-team/go-admin-core/sdk/config"
"github.com/go-admin-team/go-admin-core/sdk/pkg"
"github.com/go-admin-team/go-admin-core/sdk/service"
"github.com/golang-jwt/jwt"
"gorm.io/gorm"
"go-admin/common/actions"
@ -20,23 +23,94 @@ type SysUser struct {
}
// 用户注册账号
func (e SysUser) Register(req *dto.RegisterReq) (int, error) {
func (e SysUser) Register(req *dto.RegisterReq) (dto.SysUserRegisterResp, int) {
var role models.SysRole
result := dto.SysUserRegisterResp{}
data := models.SysUser{
Username: req.Email,
Email: req.Email,
Password: req.PassWord,
Status: "2",
NickName: req.Email,
DeptId: 11,
}
data.Username = req.Email
var count int64
if err := e.Orm.Model(data).Where("username = ?", req.Email).Count(&count).Error; err != nil {
return statuscode.AccountExisted, nil
return result, statuscode.AccountExisted
}
return statuscode.Success, nil
if count > 0 {
return result, statuscode.AccountExisted
}
if err := e.Orm.Model(&role).Where("role_key = ?", "normal_member").First(&role).Error; err != nil {
e.Log.Errorf("角色不存在")
return result, statuscode.ServerError
}
data.RoleId = role.RoleId
err := e.Orm.Transaction(func(tx *gorm.DB) error {
if err1 := tx.Create(&data).Error; err1 != nil {
e.Log.Errorf("创建用户失败 %v", err1)
return err1
}
token, expire, err1 := e.GenerateTokenForUser(&data, &role)
if err1 != nil {
e.Log.Errorf("生成token 失败 %v", err1)
return err1
}
result.Token = token
result.Expire = int(expire.Unix())
return nil
})
if err != nil {
return result, statuscode.ServerError
}
return result, statuscode.Success
}
// 假设 mw 是 *GinJWTMiddleware 实例user 是刚注册成功的用户对象
func (e *SysUser) GenerateTokenForUser(user *models.SysUser, role *models.SysRole) (string, time.Time, error) {
// 1. 创建 token 对象
token := jwt.New(jwt.GetSigningMethod("HS256"))
claims := token.Claims.(jwt.MapClaims)
claims["identity"] = user.UserId
claims["roleid"] = user.RoleId
claims["rolekey"] = role.RoleKey
claims["nice"] = user.Username
claims["datascope"] = role.DataScope
claims["rolename"] = role.RoleName
timeout := time.Hour
if config.ApplicationConfig.Mode == "dev" {
timeout = time.Duration(876010) * time.Hour
} else {
if config.JwtConfig.Timeout != 0 {
timeout = time.Duration(config.JwtConfig.Timeout) * time.Second
}
}
now := time.Now()
// 3. 设置过期时间
expire := now.Add(timeout)
claims["exp"] = expire.Unix()
claims["orig_iat"] = now.Unix()
// 4. 签名 token
tokenString, err := token.SignedString([]byte(config.JwtConfig.Secret)) //mw.signedString(token)
if err != nil {
return "", time.Time{}, err
}
return tokenString, expire, nil
}
// GetPage 获取SysUser列表