非法base64数据错误消息

tom*_*456 7 go

我正在构建一个API,接受POST给它的JSON数据.

我有以下user结构,最近我将password数据类型更改为[]bytefrom,string以便它与bcrypt包"很好地".

type User struct {
    Id           string             `json:"id,omitempty"`
    Email        string             `json:"email,omitempty"`
    Username     string             `json:"username,omitempty"`
    Password     []byte             `json:"password,omitempty"`
    Name         string             `json:"name,omitempty"`
}
Run Code Online (Sandbox Code Playgroud)

但是,当用户使用5个或更多字符的密码进行POST时,我现在在输入字节4处收到JSON响应非法base64数据中返回的内部错误.如果密码为4个或更少字符,则没有问题.

我已经将错误指向了这段代码:

err := json.NewDecoder(req.Body).Decode(User)
if err != nil && err != io.EOF {
    return err
}
Run Code Online (Sandbox Code Playgroud)

关于修复的任何想法?

ANi*_*sus 9

问题在于使用[]byte而不是string密码.这是因为encoding/json在解码时,包将期望base64编码的字符串[]byte.

文档encoding/json说:

数组和切片值编码为JSON数组,但[]字节编码为base64编码的字符串,而nil切片编码为空JSON对象.

所以,只需将其更改为string:

Password string `json:"password,omitempty"`
Run Code Online (Sandbox Code Playgroud)

如果你想将它与bcrypt一起使用,那么你只需将其转换string[]byte:

[]byte(user.Password)
Run Code Online (Sandbox Code Playgroud)