新增退出登陆,新增jwt中int64类型错误问题
This commit is contained in:
parent
0bee1fa40c
commit
3a99ce1b58
@ -10,6 +10,8 @@ import (
|
|||||||
"hospital-admin-api/global"
|
"hospital-admin-api/global"
|
||||||
"hospital-admin-api/utils"
|
"hospital-admin-api/utils"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type User struct{}
|
type User struct{}
|
||||||
@ -226,3 +228,39 @@ func (r *User) PutUserPassword(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
responses.Ok(c)
|
responses.Ok(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoginOut 退出登陆
|
||||||
|
func (b *User) LoginOut(c *gin.Context) {
|
||||||
|
userId := c.GetInt64("UserId")
|
||||||
|
if userId == 0 {
|
||||||
|
responses.FailWithMessage("用户错误", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取用户信息
|
||||||
|
adminUserDao := dao.AdminUserDao{}
|
||||||
|
adminUser, err := adminUserDao.GetAdminUserFirstById(userId)
|
||||||
|
if err != nil || adminUser == nil {
|
||||||
|
responses.FailWithMessage("用户数据错误", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// token加入黑名单
|
||||||
|
authorization := c.Request.Header.Get("Authorization")
|
||||||
|
if authorization == "" || !strings.HasPrefix(authorization, "Bearer ") {
|
||||||
|
responses.FailWithMessage("退出登陆失败", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 去除Bearer
|
||||||
|
authorization = authorization[7:] // 截取字符
|
||||||
|
|
||||||
|
// 增加缓存
|
||||||
|
_, err = global.Redis.Set(c, "jwt_black_"+authorization, time.Now().Unix(), 60*time.Second).Result()
|
||||||
|
if err != nil {
|
||||||
|
responses.FailWithMessage("退出登陆失败", c)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
responses.Ok(c)
|
||||||
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package middlewares
|
package middlewares
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"hospital-admin-api/api/dao"
|
"hospital-admin-api/api/dao"
|
||||||
"hospital-admin-api/api/responses"
|
"hospital-admin-api/api/responses"
|
||||||
@ -29,6 +30,8 @@ func Auth() gin.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println(1111)
|
||||||
|
|
||||||
// 获取用户数据
|
// 获取用户数据
|
||||||
adminUserDao := dao.AdminUserDao{}
|
adminUserDao := dao.AdminUserDao{}
|
||||||
adminUser, err := adminUserDao.GetAdminUserFirstById(userId)
|
adminUser, err := adminUserDao.GetAdminUserFirstById(userId)
|
||||||
@ -65,12 +68,6 @@ func Auth() gin.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 超级管理员不验证权限
|
|
||||||
if adminRole.IsAdmin == 1 {
|
|
||||||
c.Next()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 检测角色是否已被禁用
|
// 检测角色是否已被禁用
|
||||||
if adminRole.RoleStatus == 2 {
|
if adminRole.RoleStatus == 2 {
|
||||||
responses.FailWithMessage("角色已被禁用", c)
|
responses.FailWithMessage("角色已被禁用", c)
|
||||||
@ -78,6 +75,12 @@ func Auth() gin.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 超级管理员不验证权限
|
||||||
|
if adminRole.IsAdmin == 1 {
|
||||||
|
c.Next()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 获取用户部门数据
|
// 获取用户部门数据
|
||||||
if adminUser.DeptID != 0 {
|
if adminUser.DeptID != 0 {
|
||||||
adminDeptDao := dao.AdminDeptDao{}
|
adminDeptDao := dao.AdminDeptDao{}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
package middlewares
|
package middlewares
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"hospital-admin-api/consts"
|
"hospital-admin-api/consts"
|
||||||
"hospital-admin-api/global"
|
"hospital-admin-api/global"
|
||||||
"hospital-admin-api/utils"
|
"hospital-admin-api/utils"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -29,6 +31,7 @@ func Jwt() gin.HandlerFunc {
|
|||||||
// 检测是否存在黑名单
|
// 检测是否存在黑名单
|
||||||
res, _ := global.Redis.Get(c, "jwt_black_"+authorization).Result()
|
res, _ := global.Redis.Get(c, "jwt_black_"+authorization).Result()
|
||||||
|
|
||||||
|
fmt.Println(res)
|
||||||
if res != "" {
|
if res != "" {
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"message": "token错误/过期",
|
"message": "token错误/过期",
|
||||||
@ -53,10 +56,59 @@ func Jwt() gin.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Set("UserId", t.UserId) // 用户id
|
// 转换类型
|
||||||
c.Set("RoleId", t.RoleId) // 角色id
|
userId, err := strconv.ParseInt(t.UserId, 10, 64)
|
||||||
c.Set("DeptId", t.DeptId) // 部门id
|
if err != nil {
|
||||||
c.Set("PostId", t.PostId) // 岗位id
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"message": "token错误",
|
||||||
|
"code": consts.TOKEN_ERROR,
|
||||||
|
"data": "",
|
||||||
|
})
|
||||||
|
|
||||||
|
c.Abort()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
roleId, err := strconv.ParseInt(t.RoleId, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"message": "token错误",
|
||||||
|
"code": consts.TOKEN_ERROR,
|
||||||
|
"data": "",
|
||||||
|
})
|
||||||
|
|
||||||
|
c.Abort()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
deptId, err := strconv.ParseInt(t.DeptId, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"message": "token错误",
|
||||||
|
"code": consts.TOKEN_ERROR,
|
||||||
|
"data": "",
|
||||||
|
})
|
||||||
|
|
||||||
|
c.Abort()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
postId, err := strconv.ParseInt(t.PostId, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusOK, gin.H{
|
||||||
|
"message": "token错误",
|
||||||
|
"code": consts.TOKEN_ERROR,
|
||||||
|
"data": "",
|
||||||
|
})
|
||||||
|
|
||||||
|
c.Abort()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Set("UserId", userId) // 用户id
|
||||||
|
c.Set("RoleId", roleId) // 角色id
|
||||||
|
c.Set("DeptId", deptId) // 部门id
|
||||||
|
c.Set("PostId", postId) // 岗位id
|
||||||
c.Next()
|
c.Next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,6 +62,7 @@ func publicRouter(r *gin.Engine, api controller.Api) {
|
|||||||
|
|
||||||
// 登陆
|
// 登陆
|
||||||
basicGroup.POST("login", api.Basic.Login)
|
basicGroup.POST("login", api.Basic.Login)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,6 +134,9 @@ func privateRouter(r *gin.Engine, api controller.Api) {
|
|||||||
|
|
||||||
// 修改用户密码
|
// 修改用户密码
|
||||||
userGroup.PUT("/password", api.User.PutUserPassword)
|
userGroup.PUT("/password", api.User.PutUserPassword)
|
||||||
|
|
||||||
|
// 退出登陆
|
||||||
|
userGroup.PUT("loginout", api.User.LoginOut)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 接口
|
// 接口
|
||||||
|
|||||||
@ -41,24 +41,25 @@ func (b *BasicService) Login(LoginRequest requests.Login) (basicResponse.Login,
|
|||||||
}
|
}
|
||||||
|
|
||||||
token := &utils.Token{
|
token := &utils.Token{
|
||||||
UserId: adminUser.UserID,
|
UserId: strconv.FormatInt(adminUser.UserID, 10),
|
||||||
RoleId: adminUser.RoleID,
|
RoleId: strconv.FormatInt(adminUser.RoleID, 10),
|
||||||
DeptId: adminUser.DeptID,
|
DeptId: strconv.FormatInt(adminUser.DeptID, 10),
|
||||||
PostId: adminUser.PostID,
|
PostId: strconv.FormatInt(adminUser.PostID, 10),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 生成jwt
|
||||||
jwt, err := token.NewJWT()
|
jwt, err := token.NewJWT()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return basicResponse.Login{}, errors.New("登陆失败")
|
return basicResponse.Login{}, errors.New("登陆失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 生成jwt
|
|
||||||
result := basicResponse.Login{
|
result := basicResponse.Login{
|
||||||
UserId: strconv.FormatInt(adminUser.UserID, 10),
|
UserId: strconv.FormatInt(adminUser.UserID, 10),
|
||||||
NickName: adminUser.NickName,
|
NickName: adminUser.NickName,
|
||||||
Avatar: adminUser.Avatar,
|
Avatar: adminUser.Avatar,
|
||||||
Token: jwt,
|
Token: jwt,
|
||||||
}
|
}
|
||||||
|
|
||||||
result.GetFullAvatar()
|
result.GetFullAvatar()
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
|
|||||||
10
utils/jwt.go
10
utils/jwt.go
@ -7,11 +7,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type Token struct {
|
type Token struct {
|
||||||
UserId int64 `json:"user_id"` // 用户id
|
UserId string `json:"user_id"` // 用户id
|
||||||
RoleId int64 `json:"role_id"` // 角色id
|
RoleId string `json:"role_id"` // 角色id
|
||||||
DeptId int64 `json:"dept_id"` // 部门id
|
DeptId string `json:"dept_id"` // 部门id
|
||||||
PostId int64 `json:"post_id"` // 岗位id
|
PostId string `json:"post_id"` // 岗位id
|
||||||
jwt.RegisteredClaims // v5版本新加的方法
|
jwt.RegisteredClaims // v5版本新加的方法
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewJWT GenerateJWT 生成JWT
|
// NewJWT GenerateJWT 生成JWT
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user