三十五、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 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

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

相关推荐
皮皮林5518 分钟前
代码越“整洁”,性能越“拉胯”?
后端
benchmark_cc34 分钟前
如何用 Python + QuantDash 快速构建高胜率“配对交易(Pairs Trading)”策略?
开发语言·人工智能·python·pandas·量化交易·quantdash
金金金__1 小时前
一篇文章带你入门OpenSpec
后端
阿维的博客日记1 小时前
MultipartFile 是不是表示仅仅是一个分片?
java·后端·spring·multipartfile
海上彼尚2 小时前
Nodejs也能写Agent - 16.LangGraph篇 - 条件分支与循环
前端·后端·langchain·node.js
程序员无隅2 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
Python+992 小时前
Java 枚举类(Enum)详解:从基础到高级应用
java·开发语言·python
二炮手亮子2 小时前
浅记java线程池
java·开发语言
zmzb01033 小时前
C++课后习题训练记录Day157
开发语言·c++
dunge20263 小时前
2026年7月最新ChatGPT Plus / Pro 与 Codex:当 AI Agent 最新5.6版本来袭,必须理解事务、幂等与补偿
开发语言·人工智能·python