From 56288169e446ac0ef4c3ae5eac40c0755deb106e Mon Sep 17 00:00:00 2001 From: zhanghan Date: Thu, 6 Jan 2022 09:44:15 +0800 Subject: [PATCH] add user update func --- go.mod | 1 + go.sum | 2 ++ pkg/common/bcrypt.go | 25 +++++++++++++++++++++ pkg/controller/userhandler.go | 42 ++++++++++++++++++++++++++++++----- pkg/model/user.go | 4 ++-- pkg/router/router.go | 4 +++- 6 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 pkg/common/bcrypt.go diff --git a/go.mod b/go.mod index 3408daa7..d8774480 100644 --- a/go.mod +++ b/go.mod @@ -18,6 +18,7 @@ require ( github.com/sirupsen/logrus v1.8.1 github.com/spf13/cobra v1.2.1 github.com/spf13/viper v1.9.0 + github.com/tealeg/xlsx v1.0.5 github.com/tklauser/go-sysconf v0.3.9 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect golang.org/x/crypto v0.0.0-20211202192323-5770296d904e diff --git a/go.sum b/go.sum index eb1bf111..57f9da09 100644 --- a/go.sum +++ b/go.sum @@ -342,6 +342,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE= +github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM= github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= github.com/tklauser/numcpus v0.3.0 h1:ILuRUQBtssgnxw0XXIjKUC56fgnOrFoQQ/4+DeU2biQ= diff --git a/pkg/common/bcrypt.go b/pkg/common/bcrypt.go new file mode 100644 index 00000000..ed5fb487 --- /dev/null +++ b/pkg/common/bcrypt.go @@ -0,0 +1,25 @@ +package common + +import "golang.org/x/crypto/bcrypt" + +// 加密密码 +func HashAndSalt(pwdStr string) (pwdHash string, err error) { + pwd := []byte(pwdStr) + hash, err := bcrypt.GenerateFromPassword(pwd, bcrypt.MinCost) + if err != nil { + return + } + pwdHash = string(hash) + return +} + +// 验证密码 +func ComparePasswords(hashedPwd string, plainPwd string) bool { + byteHash := []byte(hashedPwd) + bytePwd := []byte(plainPwd) + err := bcrypt.CompareHashAndPassword(byteHash, bytePwd) + if err != nil { + return false + } + return true +} diff --git a/pkg/controller/userhandler.go b/pkg/controller/userhandler.go index 17ce6b37..0721e449 100644 --- a/pkg/controller/userhandler.go +++ b/pkg/controller/userhandler.go @@ -52,10 +52,14 @@ func Register(c *gin.Context) { "Email exist!") return } - + hasedPassword, err := common.HashAndSalt(password) + if err != nil { + response.Response(c, http.StatusInternalServerError, 500, nil, "Hased password error!") + return + } user := model.User{ //Create user Username: username, - Password: password, + Password: string(hasedPassword), Phone: phone, Email: email, Enable: enable, @@ -80,7 +84,8 @@ func Login(c *gin.Context) { "用户不存在!") return } - if password != user.Password { + check := common.ComparePasswords(user.Password, password) + if !check { response.Response(c, http.StatusBadRequest, 400, nil, @@ -125,14 +130,14 @@ func UserAll(c *gin.Context) { model.JsonPagination(c, list, total, query) } -// 更新用户 -func UserUpdate(c *gin.Context) { +// 刷新 +func UserRefresh(c *gin.Context) { var user model.User err := c.ShouldBind(&user) if model.HandleError(c, err) { return } - err = user.Update() + err = user.Refresh() if model.HandleError(c, err) { return } @@ -156,3 +161,28 @@ func DeleteUser(c *gin.Context) { } //修改用户信息 +func UpdateUser(c *gin.Context) { + var user model.User + email := c.PostForm("email") + phone := c.PostForm("phone") + password := c.PostForm("password") + if dao.IsEmailExist(email) { + // 修改手机号 + mysqlmanager.DB.Model(&user).Where("email=?", email).Update("phone", phone) + hasedPassword, err := common.HashAndSalt(password) + if err != nil { + response.Response(c, http.StatusInternalServerError, 500, nil, "Hased password error!") + return + } + + //修改密码 + mysqlmanager.DB.Model(&user).Where("email=?", email).Update("password", hasedPassword) + response.Response(c, http.StatusUnprocessableEntity, + 200, + gin.H{"data": user}, + "User update successfully!") + return + } else { + response.Fail(c, nil, "No user found!") + } +} diff --git a/pkg/model/user.go b/pkg/model/user.go index d1a89133..ed96eb92 100644 --- a/pkg/model/user.go +++ b/pkg/model/user.go @@ -34,8 +34,8 @@ func (u *User) All(q *PaginationQ) (list *[]User, total uint, err error) { return } -//Update -func (m *User) Update() (err error) { +//Refresh +func (m *User) Refresh() (err error) { m.makePassword() return mysqlmanager.DB.Model(m).Update(m).Error } diff --git a/pkg/router/router.go b/pkg/router/router.go index 71dd425f..60fd5bd3 100644 --- a/pkg/router/router.go +++ b/pkg/router/router.go @@ -35,8 +35,10 @@ func SetupRouter() *gin.Engine { user.POST("/login", controller.Login) user.GET("/info", middleware.AuthMiddleware(), controller.Info) user.GET("/searchAll", controller.UserAll) - user.GET("/update", controller.UserUpdate) + user.GET("/refresh", controller.UserRefresh) user.POST("/delete", controller.DeleteUser) + user.POST("/update", controller.UpdateUser) + // user.POST("/import", controller.ImportUser) } // TODO: 此处绑定前端静态资源handler -- Gitee