huangyan 9 months ago
parent
commit
2ace15709f
8 changed files with 125 additions and 97 deletions
  1. 24 0
      Makefile
  2. 1 1
      app/middlewares/token_middleware.go
  3. 2 0
      app/service/imp/user_imp.go
  4. 1 1
      configs/config.yaml
  5. 30 30
      models/user.go
  6. 47 46
      utils/create_token.go
  7. 6 6
      utils/md5.go
  8. 14 13
      utils/token.go

+ 24 - 0
Makefile

@@ -0,0 +1,24 @@
+BINARY_NAME := lc_ouath
+GOOS := linux
+GOARCH := amd64
+
+all: build
+# 运行
+run:
+	@echo "Running $(BINARY_NAME)..."
+	go run main.go
+# 编译为linux下的二进制文件
+build:
+	@echo "Cross-compiling for $(GOOS)/$(GOARCH)..."
+	go build -o $(BINARY_NAME)-$(GOOS)-$(GOARCH) -ldflags="-s -w" -tags netgo -a -installsuffix cgo -x -v -gcflags=all=-trimpath=$(GOPATH) -asmflags=all=-trimpath=$(GOPATH)
+# 安装必要的依赖
+deps:
+	@echo "Installing dependencies..."
+	go mod tidy
+	go mod download
+# 删除编译生成的文件
+clean:
+	@echo "Cleaning..."
+	del /Q $(BINARY_NAME)-*
+
+.PHONY: all build clean

+ 1 - 1
app/middlewares/token_middleware.go

@@ -10,7 +10,7 @@ func Authentication() gin.HandlerFunc {
     return func(c *gin.Context) {
         header := c.GetHeader("Authorization")
         token, err := utils.ParseToken(header)
-        if err != nil {
+        if err != e.SUCCESS {
             e.ResponseWithMsg(c, e.TokenIsInvalid, e.TokenIsInvalid.GetMsg())
             c.Abort()
             return

+ 2 - 0
app/service/imp/user_imp.go

@@ -84,6 +84,7 @@ func (u *User) Login(userRegist models.UserRegist) (models.UserDto, e.Rescode) {
             userdto.Account = user.Account
             userdto.Avatar = user.Avatar
             userdto.ID = user.ID
+            userdto.Role = user.Role
             return userdto, e.SUCCESS
         }
     } else {
@@ -111,6 +112,7 @@ func (u *User) CodeLogin(userRegist models.UserRegist) (models.UserDto, e.Rescod
         userdto.Account = user.Account
         userdto.Avatar = user.Avatar
         userdto.ID = user.ID
+        userdto.Role = user.Role
         return userdto, e.SUCCESS
     } else {
         return models.UserDto{}, e.GoToRegister

+ 1 - 1
configs/config.yaml

@@ -39,7 +39,7 @@ redis:
   password: ""
   db: 0
 nats:
-  NatsServer_Url: "nats://127.0.0.0:4222"
+  NatsServer_Url: "nats://127.0.0.1:4222"
 swag:
   # 将环境变量 NAME_OF_ENV_VARIABLE设置为任意值,则 /swagger/*any 返回404响应
   enable: "NAME_OF_ENV_VARIABLE"

+ 30 - 30
models/user.go

@@ -1,49 +1,49 @@
 package models
 
 import (
-	"gorm.io/gorm"
+    "gorm.io/gorm"
 )
 
 type User struct {
-	gorm.Model
-	Username   string `json:"username"` //用户名
-	Account    string `json:"account"`
-	Phone      string `json:"phone"`
-	Avatar     string `json:"avatar"`
-	Password   string `json:"password"`
-	OpenId     string `json:"open_id"`
-	Role       string `json:"role"`  //只有管理员拥有权限admin
-	State      bool   `json:"state"` //用户状态
-	SessionKey string `json:"session_key"`
-	UpdateBy   int    `json:"update_by"` //更新
+    gorm.Model
+    Username   string `json:"username"` //用户名
+    Account    string `json:"account"`
+    Phone      string `json:"phone"`
+    Avatar     string `json:"avatar"`
+    Password   string `json:"password"`
+    OpenId     string `json:"open_id"`
+    Role       string `json:"role"`  //只有管理员拥有权限admin
+    State      bool   `json:"state"` //用户状态
+    SessionKey string `json:"session_key"`
+    UpdateBy   int    `json:"update_by"` //更新
 }
 
 func (*User) TableName() string {
-	return "user"
+    return "user"
 }
 
 type UserRegist struct {
-	Username string `json:"username" validate:"required,min=2,max=20"` // 用户名
-	Phone    string `json:"phone" validate:"required,min=11,max=11"`   //手机号
-	Account  string `json:"account" validate:"required,min=6,max=20"`  //账号
-	Password string `json:"password" validate:"required,min=6,max=20"` // 密码
-	Code     string `json:"code" validate:"required,min=6,max=6"`      // 验证码
+    Username string `json:"username" validate:"required,min=2,max=20"` // 用户名
+    Phone    string `json:"phone" validate:"required,min=11,max=11"`   //手机号
+    Account  string `json:"account" validate:"required,min=6,max=20"`  //账号
+    Password string `json:"password" validate:"required,min=6,max=20"` // 密码
+    Code     string `json:"code" validate:"required,min=6,max=6"`      // 验证码
 }
 type UserVo struct {
-	Id       int    `json:"id"`
-	Username string `json:"username" validate:"required,min=2,max=20"` // 用户名
-	Phone    string `json:"phone" validate:"required,min=11,max=11"`   //手机号
-	Account  string `json:"account" validate:"required,min=6,max=20"`  //账号
-	Password string `json:"password" validate:"required,min=6,max=20"` // 密码
-	State    bool   `json:"state"`
-	Avatar   string `json:"avatar"` //用户状态
+    Id       int    `json:"id"`
+    Username string `json:"username" validate:"required,min=2,max=20"` // 用户名
+    Phone    string `json:"phone" validate:"required,min=11,max=11"`   //手机号
+    Account  string `json:"account" validate:"required,min=6,max=20"`  //账号
+    Password string `json:"password" validate:"required,min=6,max=20"` // 密码
+    State    bool   `json:"state"`
+    Avatar   string `json:"avatar"` //用户状态
 }
 type UserUpdate struct {
-	Phone    string `json:"phone" validate:"required,min=11,max=11"`
-	Code     string `json:"code" validate:"required,min=6,max=6"`
-	Password string `json:"password" validate:"required,min=6,max=20"` // 密码// 验证码//手机号
+    Phone    string `json:"phone" validate:"required,min=11,max=11"`
+    Code     string `json:"code" validate:"required,min=6,max=6"`
+    Password string `json:"password" validate:"required,min=6,max=20"` // 密码// 验证码//手机号
 }
 type UserDto struct {
-	User
-	Token string `json:"token"`
+    User
+    Token string `json:"token"`
 }

+ 47 - 46
utils/create_token.go

@@ -1,59 +1,60 @@
 package utils
 
 import (
-	"Ic_ouath/global"
-	"errors"
-	"github.com/golang-jwt/jwt/v4"
-	"time"
+    "Ic_ouath/global"
+    "errors"
+    "github.com/golang-jwt/jwt/v4"
+    "time"
+    "Ic_ouath/app/e"
 )
 
 type MyClaims struct {
-	UserId   uint   `json:"user_id"`
-	UserName string `json:"user_name"`
-	Role     string `json:"role"`
-	jwt.RegisteredClaims
+    UserId   uint   `json:"user_id"`
+    UserName string `json:"user_name"`
+    Role     string `json:"role"`
+    jwt.RegisteredClaims
 }
 
 const TokenExpireDuration = time.Hour * 72
 
 func CreateToken(userId uint, userName, role string) (string, error) {
-	claims := MyClaims{
-		UserId:   userId,
-		UserName: userName,
-		Role:     role,
-		RegisteredClaims: jwt.RegisteredClaims{
-			ExpiresAt: jwt.NewNumericDate(time.Now().Add(TokenExpireDuration)),
-			Issuer:    global.JwtSetting.Issuer,
-		},
-	}
-	var mySerect = []byte(global.JwtSetting.Secret)
-	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
-	return token.SignedString(mySerect)
+    claims := MyClaims{
+        UserId:   userId,
+        UserName: userName,
+        Role:     role,
+        RegisteredClaims: jwt.RegisteredClaims{
+            ExpiresAt: jwt.NewNumericDate(time.Now().Add(TokenExpireDuration)),
+            Issuer:    global.JwtSetting.Issuer,
+        },
+    }
+    var mySerect = []byte(global.JwtSetting.Secret)
+    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
+    return token.SignedString(mySerect)
 }
-func ParseToken(tokenStr string) (*MyClaims, error) {
-	// 使用全局配置中的密钥对token进行解析。
-	var mySecret = []byte(global.JwtSetting.Secret)
-
-	// 尝试解析并验证JWT令牌。
-	claims := new(MyClaims)
-	token, err := jwt.ParseWithClaims(tokenStr, claims, func(token *jwt.Token) (interface{}, error) {
-		return mySecret, nil
-	})
-
-	if err != nil {
-		if errors.Is(err, jwt.ErrSignatureInvalid) || errors.Is(err, jwt.ErrInvalidKey) {
-			return nil, errors.New("无效的签名或密钥")
-		} else if ve, ok := err.(*jwt.ValidationError); ok && ve.Errors&jwt.ValidationErrorExpired != 0 {
-			return nil, errors.New("令牌已过期")
-		}
-		return nil, err
-	}
-
-	// 验证令牌是否有效。
-	if !token.Valid {
-		return nil, errors.New("无效的令牌")
-	}
-
-	// 如果令牌有效,则返回解析出的声明信息。
-	return claims, nil
+func ParseToken(tokenStr string) (*MyClaims, e.Rescode) {
+    // 使用全局配置中的密钥对token进行解析。
+    var mySecret = []byte(global.JwtSetting.Secret)
+
+    // 尝试解析并验证JWT令牌。
+    claims := new(MyClaims)
+    token, err := jwt.ParseWithClaims(tokenStr, claims, func(token *jwt.Token) (interface{}, error) {
+        return mySecret, nil
+    })
+
+    if err != nil {
+        if errors.Is(err, jwt.ErrSignatureInvalid) || errors.Is(err, jwt.ErrInvalidKey) {
+            return nil, e.TokenIsInvalid
+        } else if ve, ok := err.(*jwt.ValidationError); ok && ve.Errors&jwt.ValidationErrorExpired != 0 {
+            return nil, e.TokenIsExpired
+        }
+        return nil, e.TokenIsInvalid
+    }
+
+    // 验证令牌是否有效。
+    if !token.Valid {
+        return nil, e.TokenIsInvalid
+    }
+
+    // 如果令牌有效,则返回解析出的声明信息。
+    return claims, e.SUCCESS
 }

+ 6 - 6
utils/md5.go

@@ -1,13 +1,13 @@
 package utils
 
 import (
-	"crypto/md5"
-	"encoding/hex"
+    "crypto/md5"
+    "encoding/hex"
 )
 
 func MD5(password string) string {
-	bytes := []byte(password)
-	sum := md5.Sum(bytes)
-	toString := hex.EncodeToString(sum[:])
-	return toString
+    bytes := []byte(password)
+    sum := md5.Sum(bytes)
+    toString := hex.EncodeToString(sum[:])
+    return toString
 }

+ 14 - 13
utils/token.go

@@ -1,20 +1,21 @@
 package utils
 
 import (
-	"Ic_ouath/global"
-	"Ic_ouath/models"
+    "Ic_ouath/app/e"
+    "Ic_ouath/global"
+    "Ic_ouath/models"
 )
 
 func Verification(token string) (bool, models.User) {
-	var user models.User
-	parseToken, err := ParseToken(token)
-	if err != nil {
-		return false, user
-	} else {
-		tx := global.DBLink.Where("id = ?", parseToken.UserId).First(&user)
-		if tx.RowsAffected > 0 {
-			return true, user
-		}
-		return false, user
-	}
+    var user models.User
+    parseToken, err := ParseToken(token)
+    if err != e.SUCCESS {
+        return false, user
+    } else {
+        tx := global.DBLink.Where("id = ?", parseToken.UserId).First(&user)
+        if tx.RowsAffected > 0 {
+            return true, user
+        }
+        return false, user
+    }
 }