| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package model
- import (
- "crypto/hmac"
- "crypto/sha256"
- "errors"
- "fmt"
- "woord-core-service/global"
- "gorm.io/gorm"
- )
- // 用户
- type User struct {
- gorm.Model
- // 用户名
- Name string `gorm:"unique"`
- // 用户密码,保存为 HS256 散列值
- Password string
- // 用户所有词库
- Dicts []Dict
- }
- var (
- ErrUserNameAlreadyExists = fmt.Errorf("用户名已存在")
- ErrWrongUserNameOrPassword = fmt.Errorf("用户名或密码错误")
- ErrUserNotFound = fmt.Errorf("用户不存在")
- )
- // 计算密码的 HS256 散列值
- func hashPassword(password string) string {
- mac := hmac.New(sha256.New, global.SecretKey)
- mac.Write([]byte(password))
- return fmt.Sprintf("%x", mac.Sum(nil))
- }
- // 创建用户
- func CreateUser(user *User) error {
- if global.DB.Take(user, user, "name").Error == nil {
- return ErrUserNameAlreadyExists
- }
- user.Password = hashPassword(user.Password)
- return global.DB.Select("name", "password").Create(user).Error
- }
- // 认证用户
- func AuthenticateUser(user *User) error {
- user.Password = hashPassword(user.Password)
- if err := global.DB.Take(user, user, "name", "password").Error; errors.Is(err, gorm.ErrRecordNotFound) {
- return ErrWrongUserNameOrPassword
- } else {
- return err
- }
- }
- // 获取用户
- func GetUser(user *User) error {
- if err := global.DB.Take(user, user, "id").Error; errors.Is(err, gorm.ErrRecordNotFound) {
- return ErrUserNotFound
- } else {
- return err
- }
- }
|