64 lines
1.8 KiB
Go
64 lines
1.8 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/golang-jwt/jwt/v5"
|
|
"github.com/loveuer/nf/nft/log"
|
|
"time"
|
|
"uauth/internal/opt"
|
|
"uauth/internal/sqlType"
|
|
)
|
|
|
|
type Status string
|
|
|
|
const (
|
|
StatusActive Status = "active"
|
|
StatusDisabled Status = "disabled"
|
|
)
|
|
|
|
type User struct {
|
|
Id uint64 `json:"id" gorm:"primaryKey;column:id"`
|
|
CreatedAt int64 `json:"created_at" gorm:"column:created_at;autoCreateTime:milli"`
|
|
UpdatedAt int64 `json:"updated_at" gorm:"column:updated_at;autoUpdateTime:milli"`
|
|
DeletedAt int64 `json:"deleted_at" gorm:"index;column:deleted_at;default:0"`
|
|
|
|
Username string `json:"username" gorm:"column:username;type:varchar(64);unique"`
|
|
Password string `json:"-" gorm:"column:password;type:varchar(256)"`
|
|
|
|
Status Status `json:"status" gorm:"column:status;default:''"`
|
|
|
|
Nickname string `json:"nickname" gorm:"column:nickname;type:varchar(64)"`
|
|
Avatar string `json:"avatar" gorm:"column:avatar;type:varchar(256)"`
|
|
Comment string `json:"comment" gorm:"column:comment"`
|
|
|
|
CreatedById uint64 `json:"created_by_id" gorm:"column:created_by_id"`
|
|
CreatedByName string `json:"created_by_name" gorm:"column:created_by_name;type:varchar(64)"`
|
|
|
|
LoginAt int64 `json:"login_at" gorm:"-"`
|
|
|
|
Roles []*Role `json:"-" gorm:"-"`
|
|
RoleNames sqlType.StrSlice `json:"role_names" column:"role_names"`
|
|
}
|
|
|
|
func (u *User) JwtEncode() (token string, err error) {
|
|
|
|
now := time.Now()
|
|
|
|
jwtToken := jwt.NewWithClaims(jwt.SigningMethodHS512, jwt.MapClaims{
|
|
"id": u.Id,
|
|
"username": u.Username,
|
|
"nickname": u.Nickname,
|
|
"status": u.Status,
|
|
"avatar": u.Avatar,
|
|
"login_at": now.UnixMilli(),
|
|
})
|
|
|
|
if token, err = jwtToken.SignedString([]byte(opt.JwtTokenSecret)); err != nil {
|
|
err = fmt.Errorf("JwtEncode: jwt token signed secret err: %v", err)
|
|
log.Error(err.Error())
|
|
return "", nil
|
|
}
|
|
|
|
return
|
|
}
|