这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战
用到的包
github.com/gin-contrib/sessions
github.com/gin-contrib/sessions/cookie
github.com/gin-gonic/gin
- 新建一个
WSGI
应用程序实例。
1 | go复制代码 r := gin.Default() |
- 设置全局变量store
1 | go复制代码 store := cookie.NewStore([]byte("something-very-secret")) |
- 在路由中使用中间件调用store
1 | go复制代码 r.Use(sessions.Sessions("mysession", store)) |
- 分一个基础路由组
1 | go复制代码v1 := r.Group("api/v1") |
- 在这个基础路由编写用户注册路由
1 | go复制代码v1 := r.Group("api/v1") |
3.1 service层
- 在
service
先创建一个user.go
- 再在service层上编写用户注册服务的结构体
1 | go复制代码//UserRegisterService 管理用户注册服务 |
- 在service上编写用户注册register方法
1 | go复制代码func (service *UserRegisterService) Register() { |
3.2 api层
- 在
api
层创建user.go
- 申请一个
UserRegisterService
用户注册服务对象。
1 | go复制代码var userRegisterService service.UserRegisterService |
但是这个服务我们还没有写,先把这个接口写完,再把这个服务补上。
- 上下文绑定数据
1 | go复制代码c.ShouldBind(&userRegisterService) |
- 调用这个服务的register方法
1 | go复制代码res := userRegisterService.Register() |
- 返回这个服务的处理结果
1 | go复制代码c.JSON(200, res) |
- api 层的用户注册服务全部代码
1 | go复制代码func UserRegister(c *gin.Context) { |
- 创建一个common.go文件, 进行错误的返回
1 | go复制代码//返回错误信息 ErrorResponse |
3.2 serializer
- 创建一个基础的序列化返回结构体
1 | go复制代码// Response 基础序列化器 |
接下来我们就可以编写register()
注册服务了
- 先对传过来的用户名进行验证,查看是否已经存在了
1 | go复制代码 model.DB.Model(&model.User{}).Where("user_name=?",service.UserName).Count(&count) |
- 再对密码进行加密
1 | go复制代码 if err := user.SetPassword(service.Password); err != nil { |
注意: 我们可以直接再model/user.go
下编写密码加密方法
1 | go复制代码const ( |
- 确认无误之后对用户进行创建
1 | go复制代码 if err := model.DB.Create(&user).Error; err != nil { |
服务层中用户注册
的完整代码
1 | go复制代码func (service *UserRegisterService) Register() serializer.Response { |
下一章中,我们编写用户登录的业务逻辑。
本文转载自: 掘金