第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我如何在golang中驗(yàn)證rest api請(qǐng)求的主體結(jié)構(gòu)

我如何在golang中驗(yàn)證rest api請(qǐng)求的主體結(jié)構(gòu)

Go
阿晨1998 2022-10-24 15:01:37
我正在嘗試確保發(fā)布請(qǐng)求的正文例如包含正文的確切結(jié)構(gòu),如果不應(yīng)該拋出錯(cuò)誤例如我有以下功能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 請(qǐng)求應(yīng)該尋找具有這種結(jié)構(gòu)的主體{    "password": "oldpassword",    "new_password": "newpassword",    "new_password_confirm": "newpassword",}但目前此端點(diǎn)接受不具有此確切結(jié)構(gòu)的主體。那么如何在請(qǐng)求正文中強(qiáng)制執(zhí)行結(jié)構(gòu),以便如果結(jié)構(gòu)不匹配,我會(huì)拋出錯(cuò)誤?
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊

不喜歡杜松子酒,纖維沒(méi)有內(nèi)置驗(yàn)證包


使用 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


查看完整回答
反對(duì) 回復(fù) 2022-10-24
?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

我們可以使用結(jié)構(gòu)標(biāo)簽

`validate:"required"`

確保請(qǐng)求有效負(fù)載中包含所有必填字段。

此外,我們可以使用驗(yàn)證器包提供的標(biāo)簽驗(yàn)證字段,對(duì)于其他驗(yàn)證,我們可以實(shí)現(xiàn)自定義驗(yàn)證器并像這樣注冊(cè)它們:

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


查看完整回答
反對(duì) 回復(fù) 2022-10-24
  • 2 回答
  • 0 關(guān)注
  • 103 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)