Browse Source

fix: check user status when validating token (#23)

JustSong 2 years ago
parent
commit
54b1e4adef
2 changed files with 23 additions and 0 deletions
  1. 10 0
      middleware/auth.go
  2. 13 0
      model/user.go

+ 10 - 0
middleware/auth.go

@@ -98,6 +98,16 @@ func TokenAuth() func(c *gin.Context) {
 			c.Abort()
 			return
 		}
+		if !model.IsUserEnabled(token.UserId) {
+			c.JSON(http.StatusOK, gin.H{
+				"error": gin.H{
+					"message": "用户已被封禁",
+					"type":    "one_api_error",
+				},
+			})
+			c.Abort()
+			return
+		}
 		c.Set("id", token.UserId)
 		c.Set("token_id", token.Id)
 		c.Set("unlimited_times", token.UnlimitedTimes)

+ 13 - 0
model/user.go

@@ -195,6 +195,19 @@ func IsAdmin(userId int) bool {
 	return user.Role >= common.RoleAdminUser
 }
 
+func IsUserEnabled(userId int) bool {
+	if userId == 0 {
+		return false
+	}
+	var user User
+	err := DB.Where("id = ?", userId).Select("status").Find(&user).Error
+	if err != nil {
+		common.SysError("No such user " + err.Error())
+		return false
+	}
+	return user.Status == common.UserStatusEnabled
+}
+
 func ValidateAccessToken(token string) (user *User) {
 	if token == "" {
 		return nil