我正在构建一个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)
关于修复的任何想法?
问题在于使用[]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)