1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #internal/controller/v1/v1_user_register.go package v1
import ( "golang.org/x/crypto/bcrypt" "context" "gf_study/internal/dao" "gf_study/internal/model/do" "gf_study/internal/model/entity" "github.com/gogf/gf/v2/errors/gcode" "github.com/gogf/gf/v2/errors/gerror" "github.com/gogf/gf/v2/os/gtime" "gf_study/api/v1/user" )
func (c *ControllerUser) Register(ctx context.Context, req *user.RegisterReq) (res *user.RegisterRes, err error) {
isExist, err := dao.GfUsers.Ctx(ctx).Where("username", req.Username).Exist() if err != nil { return nil, gerror.WrapCode(gcode.CodeDbOperationError, err, "检查用户是否存在失败") } if isExist { return nil, gerror.Newf("用户名 %s 已存在", req.Username) }
encryptedPassword, err := encryptPassword(req.Password) if err != nil { return nil, gerror.WrapCode(gcode.CodeOperationFailed, err, "密码加密失败") }
result, err := dao.GfUsers.Ctx(ctx).Insert(do.GfUsers{ Username: req.Username, Nickname: req.Nickname, Password: encryptedPassword, }) if err != nil { return nil, gerror.WrapCode(gcode.CodeDbOperationError, err, "用户注册失败") }
userId, err := result.LastInsertId() if err != nil { return nil, gerror.WrapCode(gcode.CodeDbOperationError, err, "获取用户ID失败") }
userEntity := &entity.GfUsers{ Id: uint(userId), Username: req.Username, Nickname: req.Nickname, RegistTime: gtime.Now(), LastLoginTime: gtime.Now(), }
return &user.RegisterRes{ Info: userEntity, }, nil }
func encryptPassword(password string) (string, error) { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { return "", err } return string(hashedPassword), nil }
|