当前位置: 首页 > news >正文

三十五、Gin注册功能实战

目录

一、创建请求组

二、service下创建register.go文件

三、实现密码加密功能

四、在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

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

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 下载github patch到本地
  • F28335的存储器与寄存器
  • k8s部署springcloud-alibaba项目
  • ubuntu2204安装kvm
  • C++设计模式——Visitor访问者模式
  • MySQL索引的深入学习与应用
  • pip install “git+https://xxx“报错error: subprocess-exited-with-error
  • C++编程语言:基础设施:函数(Bjarne Stroustrup)
  • React项目中使用发布订阅模式
  • PMP--一模--解题--11-20
  • Hive是什么?
  • 缓存预热/雪崩/穿透/击穿
  • 828华为云征文 | Flexus X的力量,驱动Halo博客在云端飞驰
  • 你都学会栈和队列了赶紧手搓一个对象池吧!!!(超详细,超简单适合新手宝宝学习)
  • 跨系统环境下LabVIEW程序稳定运行
  • AHK 中 = 和 == 等比较运算符的用法
  • fetch 从初识到应用
  • JavaScript DOM 10 - 滚动
  • MobX
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PaddlePaddle-GitHub的正确打开姿势
  • SAP云平台里Global Account和Sub Account的关系
  • Unix命令
  • vue 个人积累(使用工具,组件)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 基于HAProxy的高性能缓存服务器nuster
  • 近期前端发展计划
  • 力扣(LeetCode)22
  • 前端
  • 全栈开发——Linux
  • 如何实现 font-size 的响应式
  • 使用 Docker 部署 Spring Boot项目
  • 我建了一个叫Hello World的项目
  • 小试R空间处理新库sf
  • 用 Swift 编写面向协议的视图
  • ​虚拟化系列介绍(十)
  • ### RabbitMQ五种工作模式:
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (四)React组件、useState、组件样式
  • (算法)大数的进制转换
  • (正则)提取页面里的img标签
  • (转)为C# Windows服务添加安装程序
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自用)网络编程
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET 服务 ServiceController
  • .net 提取注释生成API文档 帮助文档
  • .net分布式压力测试工具(Beetle.DT)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET中使用Protobuffer 实现序列化和反序列化