Как разобрать пароль как массив байтов с помощью волокна

Я использую анализатор тела Go fiber для анализа тела запроса. У меня есть следующая структура

type SignInCredentials struct {
    Email    string
    Password []byte
}

Где у меня есть пароль в виде кусочка байтов. Когда я пытаюсь разобрать тело вот так

func SignUp(db *database.Database) fiber.Handler {
    return func(c *fiber.Ctx) error {

        cred := new(model.SignUpCredentials)

        if err := c.BodyParser(cred); err != nil {
            return SendParsingError(c)
        }

Я получаю ошибку схемы

schema: error converting value for index 0 of \"Password\

потому что тип пароля данных формы не соответствует типу []byte. Я посмотрел их примеры и заметил, что в документации они используют строку для хранения пароля. Но я настроен хранить его как фрагмент байтов. Как я могу это сделать?

// Field names should start with an uppercase letter
type Person struct {
    Name string `json:"name" xml:"name" form:"name"`
    Pass string `json:"pass" xml:"pass" form:"pass"`
}

app.Post("/", func(c *fiber.Ctx) error {
        p := new(Person)

        if err := c.BodyParser(p); err != nil {
            return err
        }

        log.Println(p.Name) // john
        log.Println(p.Pass) // doe

        // ...
})
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
0
1 442
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Оно передается как string, а не []byte. Сначала вам нужно проанализировать его как строку, а затем вы можете преобразовать его в нужную структуру:

func SignUp(db *database.Database) fiber.Handler {
    return func(c *fiber.Ctx) error {
        // an anonymous struct to parse the body
        body := struct{
            Email string
            Password string
        }{}
        if err := c.BodyParser(body); err != nil {
            return SendParsingError(c)
        }

        cred := SignInCredentials{
            Email:    body.Email,
            Password: []byte(body.Password),
        }

Есть ли способ или рекомендуется передавать его в виде массива байтов?

anonymous-dev 10.12.2020 14:06

Это почтовая форма, верно? Это кодирует URL-адрес, поэтому: Нет. То же самое, если тело json. Json не имеет возможности передавать массив байтов.

TehSphinX 10.12.2020 14:16

Другие вопросы по теме