亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何在golang中驗證rest api請求的主體結構

我如何在golang中驗證rest api請求的主體結構

Go
阿晨1998 2022-10-24 15:01:37
我正在嘗試確保發布請求的正文例如包含正文的確切結構,如果不應該拋出錯誤例如我有以下功能func UpdatePassword(c *fiber.Ctx) error {    type UpdatePasswordData struct {        Password  string `json:"password" form:"password"`        NewPassword string `json:"new_password" form:"new_password"`        NewPasswordConfirm string `json:"new_password_confirm" form:"new_password_confirm"`    }        data := UpdatePasswordData{}    if err := c.BodyParser(&data); err != nil {        return err    }    var user models.User        if data.NewPassword != data.NewPasswordConfirm {        c.Status(400)        return c.JSON(fiber.Map{            "message": "passwords do not match",        })    }    email, _ := middlewares.GetUserEmail(c)    newPassword := models.HashPassword(data.NewPassword)    database.DB.Model(&user).Select("Password").Where("email = ?", email).Updates(map[string]interface{}{"Password": newPassword})    return c.JSON(user)}POST 請求應該尋找具有這種結構的主體{    "password": "oldpassword",    "new_password": "newpassword",    "new_password_confirm": "newpassword",}但目前此端點接受不具有此確切結構的主體。那么如何在請求正文中強制執行結構,以便如果結構不匹配,我會拋出錯誤?
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

不喜歡杜松子酒,纖維沒有內置驗證包


使用 go-playground/validator


go get github.com/go-playground/validator

例子


type UpdatePasswordData struct {

        Password  string `json:"password" validate:"required,min=8,max=32"`

        NewPassword string `json:"new_password" validate:"required,min=8,max=32"`

        NewPasswordConfirm string `json:"new_password_confirm" validate:"eqfield=NewPassword"`

}


func UpdatePassword(c *fiber.Ctx) error {

  var body UpdatePasswordData

  if err := c.BodyParser(&body); err != nil {

    return err

  }


  validate := validator.New()

  if err := validate.Struct(body); err != nil {

    return err

  }


  // do others

  // get current user, check password == hash(body.password)

  // save new passworld

}

或者您可以查看光纖辦公文檔https://docs.gofiber.io/guide/validation#validator-package


查看完整回答
反對 回復 2022-10-24
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

我們可以使用結構標簽

`validate:"required"`

確保請求有效負載中包含所有必填字段。

此外,我們可以使用驗證器包提供的標簽驗證字段,對于其他驗證,我們可以實現自定義驗證器并像這樣注冊它們:

validate := validator.New()
validate.RegisterValidation("password-validator", PasswordValidator)


查看完整回答
反對 回復 2022-10-24
  • 2 回答
  • 0 關注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號