三十五、Gin注册功能实战

embedded/2024/9/23 15:23:13/

目录

gin-left:80px;">

gin-left:80px;">一、创建请求组

gin-left:80px;">二、service下创建register.go文件

gin-left:80px;">三、实现密码加密功能

gin-left:80px;">四、在register方法中使用encryptPassword函数


一、创建请求组

const (rootPath   = "/api/"noAuthPath = "/out/api/"
)
	//创建请求组noAuth := r.Group(noAuthPath)//注册功能路由绑定noAuth.POST("cms/register", cmsApp.Register)

二、service下创建register.go文件

package servicesimport ("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

若多次打印会发现结果是不一样的

 


http://www.ppmy.cn/embedded/110969.html

相关文章

全球AI应用市场洞察:市场快速崛起,“陪伴式AI”、“图像AI”应用爆款频出!

自2023年 GPT4 的问世以来,得益于这股新的技术变量,各类 AI 应用在市场上遍地开花。在这轮热潮之下,不同市场和细分赛道有何机遇和挑战?以下根据 Sensor Tower 最新报告分析,帮助移动开发者、广告主洞察全球AI应用市场…

用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:下(人物动画)

上个博客我们做出了人物的动画机和人物移动跳跃,接下来我们要做出人物展现出来的动画了 我们接下来就要用到动画机了,双击我们的动画机,进入到这样的页面,我这是已经做好的页面,你们是没有这些箭头的 依次像我一样连接…

adb install失败: INSTALL_PARSE_FAILED_NO_CERTIFICATES

这个错误表明在尝试安装 APK 文件时出现了问题,原因是 APK 文件中的 AndroidManifest.xml 没有签名证书。在 Android 系统中,所有的应用都必须经过签名才能安装到设备上。以下是解决此问题的方法: 方法一:使用 Android Studio 或命…

opencv对比度增强方法算法汇总

1、线性变换 线性变化是最好理解的,假设原图为srcimg , 变换后的图像为dstimg,则: dstimg a * srcimg b a为变换系数 2、分段线性变换 3、伽马变换 4、直方图正规化 5、直方图均衡化 6、局部自适应直方图均衡化

408:强化笔记|王道|DS|OS|CO|计网

目录 DS 数据结构算法题一、快速排序二、二路归并排序三、链表(2.3课后习题)四、二叉树五、图应用题 OS 操作系统第二章 进程与线程零、大观一、PV操作 第三章 内存管理一、内存管理大题 CO 计算机组成原理第三章 存储系统一、Cache大题二、TLB大题 第二章 数据的表示和运算第四…

第3篇:【系统分析师】数据库系统

基本概念 三级模式-两级映像 数据库设计 掌握数据库设计的步骤顺序,以及各个阶段的产出物。在逻辑结构设计中做范式处理 数据库模型 E-R模型 关系模型 关系代数(sql语言) 规范化 函数依赖,键与约束,模式分解 范式 …

图算法 | 图算法的分类有哪些?(下)

图算法的分类有哪些?综合当前学术界和工业界图计算领域目前最新的发展情况,把图算法划分为了以下六大类: ❑中心性(Centrality)算法:如节点出入度、全图出入度、接近中心性、中介中心性、图中心性、调和中心性等。 ❑相似度(Simil…

多字节字符和宽字符

小时候,买东西的单位是一角、二角和五角,现在的单位是一元、五元和十元。人类社会的发展和计算机发展本质没啥两样,形态不同而已。 编码格式的历史 尽管早期只用ASCII码就可以表达所有字符,但计算机日益推广让其他国家不同语言的…