Skip to content

Commit

Permalink
修复更新密码接口 (#387)
Browse files Browse the repository at this point in the history
  • Loading branch information
caoyingjunz authored May 19, 2024
1 parent 4ed4c9a commit 9b2838b
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 34 deletions.
6 changes: 0 additions & 6 deletions api/server/httputils/httputils.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package httputils

import (
"context"
"net/http"

"github.com/gin-gonic/gin"
Expand Down Expand Up @@ -114,8 +113,3 @@ func ShouldBindAny(c *gin.Context, jsonObject interface{}, uriObject interface{}
}
return nil
}

func GetUserID(ctx context.Context) (id int64) {
id, _ = ctx.Value("userId").(int64)
return
}
4 changes: 3 additions & 1 deletion api/server/router/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,13 @@ func (u *userRouter) initRoutes(httpEngine *gin.Engine) {
{
userRoute.POST("", u.createUser)
userRoute.PUT("/:userId", u.updateUser)
userRoute.PUT("/password", u.updatePassword)
userRoute.DELETE("/:userId", u.deleteUser)
userRoute.GET("/:userId", u.getUser)
userRoute.GET("", u.listUsers)

// 用户修改密码或者管理员重置密码
userRoute.PUT("/:userId/password", u.updatePassword)

// 用户的登陆或者退出
userRoute.POST("/login", u.login)
userRoute.POST("/:userId/logout", u.logout)
Expand Down
23 changes: 11 additions & 12 deletions api/server/router/user/user_routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,21 +77,16 @@ func (u *userRouter) createUser(c *gin.Context) {
// @Security Bearer
func (u *userRouter) updateUser(c *gin.Context) {
r := httputils.NewResponse()

var (
idMeta IdMeta
req types.UpdateUserRequest
err error
)
if err = c.ShouldBindUri(&idMeta); err != nil {
httputils.SetFailed(c, r, err)
return
}

var req types.UpdateUserRequest
if err = c.ShouldBindJSON(&req); err != nil {
if err = httputils.ShouldBindAny(c, &req, &idMeta, nil); err != nil {
httputils.SetFailed(c, r, err)
return
}

if err = u.c.User().Update(c, idMeta.UserId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
Expand All @@ -117,13 +112,17 @@ func (u *userRouter) updateUser(c *gin.Context) {
// @Security Bearer
func (u *userRouter) updatePassword(c *gin.Context) {
r := httputils.NewResponse()
var req types.UpdateUserPasswordRequest
if err := c.ShouldBindJSON(&req); err != nil {

var (
idMeta IdMeta
req types.UpdateUserPasswordRequest
err error
)
if err = httputils.ShouldBindAny(c, &req, &idMeta, nil); err != nil {
httputils.SetFailed(c, r, err)
return
}

if err := u.c.User().UpdatePassword(c, &req); err != nil {
if err = u.c.User().UpdatePassword(c, idMeta.UserId, &req); err != nil {
httputils.SetFailed(c, r, err)
return
}
Expand Down
27 changes: 12 additions & 15 deletions pkg/controller/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import (
"k8s.io/klog/v2"

"github.com/caoyingjunz/pixiu/api/server/errors"
"github.com/caoyingjunz/pixiu/api/server/httputils"
"github.com/caoyingjunz/pixiu/cmd/app/config"
"github.com/caoyingjunz/pixiu/pkg/db"
"github.com/caoyingjunz/pixiu/pkg/db/model"
Expand All @@ -39,11 +38,13 @@ type UserGetter interface {
type Interface interface {
Create(ctx context.Context, req *types.CreateUserRequest) error
Update(ctx context.Context, userId int64, req *types.UpdateUserRequest) error
UpdatePassword(ctx context.Context, req *types.UpdateUserPasswordRequest) error
Delete(ctx context.Context, userId int64) error
Get(ctx context.Context, userId int64) (*types.User, error)
List(ctx context.Context, opts types.ListOptions) ([]types.User, error)

// UpdatePassword 用户修改密码或者管理员重置密码
UpdatePassword(ctx context.Context, userId int64, req *types.UpdateUserPasswordRequest) error

// GetCount 仅获取用户数量
GetCount(ctx context.Context, opts types.ListOptions) (int64, error)

Expand Down Expand Up @@ -99,26 +100,22 @@ func (u *user) Update(ctx context.Context, uid int64, req *types.UpdateUserReque
return nil
}

func (u *user) UpdatePassword(ctx context.Context, req *types.UpdateUserPasswordRequest) error {
// Users are allowed to update their own password only.
userID := httputils.GetUserID(ctx)
if userID == 0 {
return errors.ErrForbidden
}

func (u *user) UpdatePassword(ctx context.Context, userId int64, req *types.UpdateUserPasswordRequest) error {
// 新老密码不允许相同
if req.New == req.Old {
return errors.ErrDuplicatedPassword
}

object, err := u.factory.User().Get(ctx, userID)
object, err := u.factory.User().Get(ctx, userId)
if err != nil {
klog.Errorf("failed to get user(%d): %v", userID, err)
klog.Errorf("failed to get user(%d): %v", userId, err)
return errors.ErrServerInternal
}
if object == nil {
return errors.ErrUserNotFound
}

// 校验旧密码是否正确
if err = util.ValidateUserPassword(object.Password, req.Old); err != nil {
klog.Errorf("检验用户密码失败: %v", err)
return errors.ErrInvalidPassword
Expand All @@ -130,13 +127,13 @@ func (u *user) UpdatePassword(ctx context.Context, req *types.UpdateUserPassword
return errors.ErrServerInternal
}

updates := map[string]interface{}{
if err = u.factory.User().Update(ctx, userId, *req.ResourceVersion, map[string]interface{}{
"password": newPass,
}
if err := u.factory.User().Update(ctx, userID, *req.ResourceVersion, updates); err != nil {
klog.Errorf("failed to update user(%d): %v", userID, err)
}); err != nil {
klog.Errorf("failed to update user(%d) password: %v", userId, err)
return errors.ErrServerInternal
}

return nil
}

Expand Down

0 comments on commit 9b2838b

Please sign in to comment.