ziwen 1 year ago
parent
commit
d7eab4ac24

+ 36 - 7
controller/auth.go

@@ -6,9 +6,9 @@ import (
 	"github.com/go-playground/validator/v10"
 	"hongze/hongze_yb_en_api/controller/resp"
 	"hongze/hongze_yb_en_api/global"
-	"hongze/hongze_yb_en_api/models"
 	"hongze/hongze_yb_en_api/models/english_report_email"
 	"hongze/hongze_yb_en_api/models/msg_code"
+	"hongze/hongze_yb_en_api/models/session"
 	"hongze/hongze_yb_en_api/services"
 	"hongze/hongze_yb_en_api/utils"
 	"time"
@@ -18,7 +18,7 @@ type AuthController struct {
 }
 
 func (a *AuthController) Login(c *gin.Context) {
-	req := new(models.LoginReq)
+	req := new(services.LoginReq)
 	err := c.ShouldBind(&req)
 	if err != nil {
 		errs, ok := err.(validator.ValidationErrors)
@@ -48,8 +48,8 @@ func (a *AuthController) Login(c *gin.Context) {
 	}
 	account := utils.MD5(req.Account)
 	token, err := utils.GenToken(account)
-	sysSession := new(models.EnglishYbSession)
-	sysSession.UserId = int(sysUser.AdminId)
+	sysSession := new(session.EnglishYbSession)
+	sysSession.UserId = int(sysUser.Id)
 	//现在要求永不过期
 	sysSession.ExpireTime = time.Now().AddDate(99, 0, 0)
 	sysSession.CreatedTime = time.Now()
@@ -67,7 +67,7 @@ func (a *AuthController) Login(c *gin.Context) {
 }
 
 func (a *AuthController) Register(c *gin.Context) {
-	req := new(models.RegisterReq)
+	req := new(services.RegisterReq)
 	err := c.ShouldBind(&req)
 	if err != nil {
 		errs, ok := err.(validator.ValidationErrors)
@@ -118,8 +118,8 @@ func (a *AuthController) Register(c *gin.Context) {
 // @Success 200 {object} models.LoginResp
 // @router /modifyPwd [post]
 func (a *AuthController) ModifyPwd(c *gin.Context) {
-	req := new(models.ModifyPwdReq)
-	err := c.BindQuery(&req)
+	req := new(services.ModifyPwdReq)
+	err := c.ShouldBind(&req)
 	if err != nil {
 		errs, ok := err.(validator.ValidationErrors)
 		if !ok {
@@ -129,7 +129,36 @@ func (a *AuthController) ModifyPwd(c *gin.Context) {
 		resp.FailData("参数解析失败", errs.Translate(global.Trans), c)
 		return
 	}
+	userinfo := services.GetInfoByClaims(c)
+
+	if req.NewPwd == "" {
+		resp.Fail("新密码不能为空", c)
+		return
+	}
+
+	if req.OldPwd == "" {
+		resp.Fail("旧密码不能为空", c)
+		return
+	}
+
+	if req.OldPwd != userinfo.Password{
+		resp.Fail("旧密码错误,请重新输入", c)
+		return
+	}
+
+	emailitem := english_report_email.Email{
+		Id:           userinfo.Id,
+		Password:     req.NewPwd,
+	}
+	emailitem.ModifyTime = time.Now()
+
+	err = emailitem.Update([]string{"Password"})
+	if err != nil {
+		resp.FailMsg("修改密码失败", "修改密码失败,Err:" + err.Error(), c)
+		return
+	}
 
+	resp.Ok("修改成功", c)
 }
 
 // GetSmsCode 获取短信验证码接口

+ 48 - 1
middleware/token.go

@@ -2,10 +2,57 @@ package middleware
 
 import (
 	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb_en_api/controller/resp"
+	"hongze/hongze_yb_en_api/models/english_report_email"
+	"hongze/hongze_yb_en_api/models/session"
+	"hongze/hongze_yb_en_api/services"
+	"hongze/hongze_yb_en_api/utils"
 )
 
 func Token() gin.HandlerFunc {
 	return func(c *gin.Context) {
+		token := c.Request.Header.Get("Authorization")
+		if token == "" {
+			token = c.DefaultQuery("authorization", "")
+			if token == "" {
+				token = c.DefaultQuery("Authorization", "")
+			}
+		}
+		if token == "" {
+			resp.TokenError(nil, "未登录或非法访问", "未登录或非法访问", c)
+			c.Abort()
+			return
+		}
+		sessionInfo, err := session.GetTokenByToken(token)
+		if err != nil {
+			if err == utils.ErrNoRow {
+				resp.TokenError(nil, "信息已变更,请重新登陆!", "找不到对应session", c)
+				c.Abort()
+				return
+			}
+			resp.TokenError(nil, "网络异常,请稍后重试!", err.Error(), c)
+			c.Abort()
+			return
+		}
 
+		if sessionInfo == nil {
+			resp.TokenError(nil, "网络异常,请稍后重试1038!", "找不到对应session", c)
+			c.Abort()
+			return
+		}
+
+		emailItem := english_report_email.Email{Id: uint(sessionInfo.UserId)}
+		userEmail, err := emailItem.GetById(sessionInfo.UserId)
+		if err != nil  && err != utils.ErrNoRow {
+			resp.TokenError(nil, "数据异常!", "userID查询用户信息错误", c)
+			c.Abort()
+			return
+		}
+		userInfo := services.UserInfo{
+			Email:      *userEmail,
+		}
+		userInfo.LoginToken = token
+		c.Set("userInfo", userInfo)
+		c.Next()
 	}
-}
+}

+ 1 - 1
models/session/english_yb_session.go

@@ -1,4 +1,4 @@
-package models
+package session
 
 import (
 	"hongze/hongze_yb_en_api/global"

+ 24 - 0
models/session/query.go

@@ -0,0 +1,24 @@
+package session
+
+import (
+	"gorm.io/gorm"
+	"hongze/hongze_yb_en_api/global"
+	"time"
+)
+
+// GetTokenByToken 根据token获取信息
+func GetTokenByToken(token string) (item *EnglishYbSession, err error) {
+	err = getDb().Where("access_token = ? and expire_time> ? ", token, time.Now()).Order("session_id DESC").First(&item).Error
+	return
+}
+
+// 获取数据库链接
+func getDb() *gorm.DB {
+	return global.MYSQL["rddp"]
+}
+
+// GetTokenByUid 根据用户id获取token
+func GetTokenByUid(userId int) (item *EnglishYbSession, err error) {
+	err = getDb().Where("user_id = ? ", userId).First(&item).Error
+	return
+}

+ 5 - 1
routers/auth.go

@@ -3,6 +3,7 @@ package routers
 import (
 	"github.com/gin-gonic/gin"
 	"hongze/hongze_yb_en_api/controller"
+	"hongze/hongze_yb_en_api/middleware"
 )
 
 func InitAuth(baseGroup *gin.RouterGroup) {
@@ -11,7 +12,10 @@ func InitAuth(baseGroup *gin.RouterGroup) {
 	authGroup := baseGroup.Group("auth/")
 	authGroup.POST("login", authController.Login)
 	authGroup.POST("register", authController.Register)
-	authGroup.POST("modifyPwd", authController.ModifyPwd)
 	authGroup.GET("smsCode", authController.GetSmsCode)
 	authGroup.GET("emailCode", authController.GetEmailCode)
+
+	authTokenController := new(controller.AuthController)
+	authTokenGroup := baseGroup.Group("auth/").Use(middleware.Token())
+	authTokenGroup.POST("modifyPwd", authTokenController.ModifyPwd).Use(middleware.Token())
 }

+ 1 - 1
routers/english_report.go

@@ -10,7 +10,7 @@ func InitReport(baseGroup *gin.RouterGroup) {
 	//登录
 	controller := new(english_report.EnglishReportController)
 	vController := new(english_report.EnglishVideoController)
-	group := baseGroup.Group("english_report/").Use(middleware.ShareEmailHandler())
+	group := baseGroup.Group("english_report/").Use(middleware.ShareEmailHandler()).Use(middleware.Token())
 	group.GET("list", controller.List)
 	group.GET("video/list", vController.List)
 	group.GET("classify", controller.Classify)

+ 13 - 2
services/user.go

@@ -1,6 +1,9 @@
-package models
+package services
 
-import "hongze/hongze_yb_en_api/models/english_report_email"
+import (
+	"github.com/gin-gonic/gin"
+	"hongze/hongze_yb_en_api/models/english_report_email"
+)
 
 type LoginReq struct {
 	Account  string `description:"账号"`
@@ -36,4 +39,12 @@ type ModifyPwdReq struct {
 type UserInfo struct {
 	english_report_email.Email
 	LoginToken string
+}
+
+// GetInfoByClaims 从Claims中获取用户信息
+func GetInfoByClaims(c *gin.Context) (userInfo UserInfo) {
+	//获取jwt数据失败
+	claims, _ := c.Get("userInfo")
+	userInfo = claims.(UserInfo)
+	return
 }