目录
四、在register方法中使用encryptPassword函数
一、创建请求组
const (
rootPath = "/api/"
noAuthPath = "/out/api/"
)
//创建请求组
noAuth := r.Group(noAuthPath)
//注册功能路由绑定
noAuth.POST("cms/register", cmsApp.Register)
二、service下创建register.go文件
package services
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
)
//入参校验
type RegisterReq struct {
UserID string `json:"user_id" binding:"required"`
Password string `json:"password" binding:"required"`
Nickname string `json:"nickname" binding:"required"`
}
//返回校验
type RegisterRsp struct {
Message string `json:"message" binding:"required"`
}
func (c *CmsApp) Register(ctx *gin.Context) {
var req RegisterReq
//当入参时错误返回
if err := ctx.ShouldBindJSON(&req); err != nil {
ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
//todo 密码加密
//todo 账号校验是否存在
//todo 保存
//入参没有错误时返回
ctx.JSON(http.StatusOK, gin.H{
"msg": "ok",
"code": http.StatusOK,
"data": RegisterRsp{
Message: fmt.Sprintf("注册成功"),
},
})
}
三、实现密码加密功能
使用
bcrypt.GenerateFromPassword 进行密码加密,完成encryptPassword函数
func encryptPassword(password string) (string, error) {
//因为GenerateFromPassword(password []byte, cost int) ([]byte, error) {
//入参为byte所以要把password转化一下
//cost 一般用默认10 这里的越大计算的复杂度就越高
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
fmt.Printf("bcrypt failed, err:%v\n", err)
}
//再转回string返回
return string(hashedPassword), nil
}
四、在register方法中使用encryptPassword函数
//todo 密码加密
hashedPassword, err := encryptPassword(req.Password)
if err != nil {
ctx.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
}
fmt.Printf("this is hashedPassword %v", hashedPassword)
打印结果:
$2a$10$4jvJs03CwJLXbHWhCeCWOuiwVk/PR3aEb771iJoPTF3hLQBXwTdqe
若多次打印会发现结果是不一样的