104 lines
2.2 KiB
Go
104 lines
2.2 KiB
Go
package user
|
|
|
|
import (
|
|
"github.com/gin-contrib/sessions"
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/ssdomei232/goodBaby/configs"
|
|
"github.com/ssdomei232/goodBaby/model"
|
|
)
|
|
|
|
// 处理注册请求,配置文件中可设置禁用注册
|
|
func HandleRegistry(c *gin.Context) {
|
|
var user model.User
|
|
var err error
|
|
|
|
config, err := configs.GetConfig()
|
|
if err != nil {
|
|
c.JSON(500, gin.H{"code": 500, "data": "获取配置文件失败"})
|
|
return
|
|
}
|
|
|
|
if !config.EnableRegistry {
|
|
c.JSON(403, gin.H{"code": 403, "data": "注册功能已关闭"})
|
|
return
|
|
}
|
|
|
|
err = c.BindJSON(&user)
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "data": "输入错误"})
|
|
return
|
|
}
|
|
|
|
if err = user.IsValid(); err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "data": err.Error()})
|
|
return
|
|
}
|
|
|
|
if isExist := user.IsExist(); isExist {
|
|
c.JSON(400, gin.H{"code": 400, "data": "用户名已存在"})
|
|
return
|
|
}
|
|
|
|
if err = createUser(&user); err != nil {
|
|
c.JSON(500, gin.H{"code": 500, "data": "注册失败"})
|
|
return
|
|
}
|
|
|
|
session := sessions.Default(c)
|
|
session.Set("username", user.Username)
|
|
session.Save()
|
|
|
|
c.JSON(200, gin.H{"code": 200, "data": "注册成功"})
|
|
}
|
|
|
|
// 处理登录请求
|
|
func HandleLogin(c *gin.Context) {
|
|
var user model.User
|
|
var err error
|
|
|
|
err = c.BindJSON(&user)
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "data": "输入错误"})
|
|
return
|
|
}
|
|
|
|
if err = user.IsValid(); err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "data": err.Error()})
|
|
}
|
|
|
|
if err = verifyUser(&user); err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "data": "用户名或密码错误"})
|
|
return
|
|
}
|
|
|
|
session := sessions.Default(c)
|
|
session.Set("username", user.Username)
|
|
session.Save()
|
|
|
|
c.JSON(200, gin.H{"code": 200, "data": "登录成功"})
|
|
}
|
|
|
|
// 处理获取用户信息请求
|
|
func HandleGetUserInfo(c *gin.Context) {
|
|
userInfo, err := GetUserInfoByGinCtx(c)
|
|
if err != nil {
|
|
c.JSON(500, gin.H{"code": 500, "data": "获取用户信息失败"})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"code": 200, "data": userInfo})
|
|
}
|
|
|
|
// 认证中间件
|
|
func AuthMiddleware() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
session := sessions.Default(c)
|
|
username := session.Get("username")
|
|
if username == nil {
|
|
c.JSON(401, gin.H{"code": 401, "data": "未登录"})
|
|
c.Abort()
|
|
return
|
|
}
|
|
c.Next()
|
|
}
|
|
}
|