Files
goodBaby/api/user/tool.go
T

82 lines
1.8 KiB
Go
Raw Normal View History

2026-04-05 10:36:22 +08:00
package user
import (
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"github.com/ssdomei232/goodBaby/handler/db"
"github.com/ssdomei232/goodBaby/model"
"golang.org/x/crypto/bcrypt"
)
// 加密密码
func encryptPassword(password string) (string, error) {
hashedID, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
return "", err
}
return string(hashedID), nil
}
// 验证密码
func verifyPassword(hashedPassword, inputPassword string) error {
return bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(inputPassword))
}
func createUser(u *model.User) error {
gormDB, err := db.GetGormDB()
if err != nil {
return err
}
hashedPassword, err := encryptPassword(u.Password)
if err != nil {
return err
}
u.Password = hashedPassword
result := gormDB.Create(u)
return result.Error
}
// 校验密码
func verifyUser(u *model.User) error {
gormDB, err := db.GetGormDB()
if err != nil {
return err
}
var hashedPassword string
result := gormDB.Where("username = ?", u.Username).First(&model.User{}).Select("password").Scan(&hashedPassword)
if result.Error != nil {
return result.Error
}
return verifyPassword(hashedPassword, u.Password)
}
// 通过用户名获取用户信息
func GetUserInfo(username string) (*model.User, error) {
gormDB, err := db.GetGormDB()
if err != nil {
return nil, err
}
var user model.User
result := gormDB.Where("username = ?", username).First(&user)
if result.Error != nil {
return nil, result.Error
}
return &user, nil
}
// 通过 gin.Context 获取用户信息
func GetUserInfoByGinCtx(c *gin.Context) (userInfo *model.User, err error) {
session := sessions.Default(c)
username := session.Get("username")
userInfo, err = GetUserInfo(username.(string))
if err != nil {
return nil, err
}
return userInfo, nil
}