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

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

 

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们来讲一下如何使用Gin框架进行项目实战。 首先,我们需要安装Gin框架。可以使用以下命令进行安装: ``` go get -u github.com/gin-gonic/gin ``` 接下来,我们可以创建一个简单的web服务。在这个例子中,我们将创建一个API,用于获取用户信息。我们将使用以下代码: ```go package main import ( "net/http" "github.com/gin-gonic/gin" ) type User struct { Name string `json:"name"` Email string `json:"email"` } func main() { router := gin.Default() router.GET("/users/:id", func(c *gin.Context) { id := c.Param("id") user := User{ Name: "John Doe", Email: "johndoe@example.com", } c.JSON(http.StatusOK, gin.H{ "id": id, "user": user, }) }) router.Run(":8080") } ``` 在这个例子中,我们定义了一个User结构体和一个处理路由的函数。当我们访问/users/:id路由时,会返回一个JSON格式的响应,包含用户的信息。 接下来,我们可以使用PostgreSQL数据库来存储和检索用户信息。我们可以使用以下代码连接到PostgreSQL: ```go package main import ( "database/sql" "log" "net/http" "github.com/gin-gonic/gin" _ "github.com/lib/pq" ) type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` } func main() { db, err := sql.Open("postgres", "user=postgres password=postgres dbname=postgres sslmode=disable") if err != nil { log.Fatalln(err) } router := gin.Default() router.GET("/users/:id", func(c *gin.Context) { id := c.Param("id") var user User err := db.QueryRow("SELECT id, name, email FROM users WHERE id = $1", id).Scan(&user.ID, &user.Name, &user.Email) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, gin.H{ "error": "Internal server error", }) return } c.JSON(http.StatusOK, gin.H{ "id": id, "user": user, }) }) router.Run(":8080") } ``` 在这个例子中,我们在路由处理函数中查询了一个名为users的表,该表包含用户的信息。我们使用`github.com/lib/pq`库来连接到PostgreSQL数据库。 以上就是使用Gin框架进行项目实战的基本流程。当然,具体的项目实战过程中,需要根据具体需求进行更加详细的开发
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值