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

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

相关推荐
二进制person37 分钟前
Java SE--方法的使用
java·开发语言·算法
OneQ6661 小时前
C++讲解---创建日期类
开发语言·c++·算法
码农不惑2 小时前
2025.06.27-14.44 C语言开发:Onvif(二)
c语言·开发语言
程序员岳焱3 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
麦兜*3 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
Coding小公仔3 小时前
C++ bitset 模板类
开发语言·c++
大只鹅3 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
ai小鬼头4 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
小赖同学啊4 小时前
物联网数据安全区块链服务
开发语言·python·区块链
shimly1234564 小时前
bash 脚本比较 100 个程序运行时间,精确到毫秒,脚本
开发语言·chrome·bash