Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
FLIPPED-AURORA
gin-vue-admin
提交
4aa116cd
G
gin-vue-admin
项目概览
FLIPPED-AURORA
/
gin-vue-admin
大约 1 年 前同步成功
通知
332
Star
18154
Fork
5505
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gin-vue-admin
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4aa116cd
编写于
12月 28, 2019
作者:
Mr.奇淼(
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加jwt主动失效功能(next:多点登录限制
上级
074386c8
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
114 addition
and
10 deletion
+114
-10
QMPlusServer/controller/api/sys_jwt_blacklist.go
QMPlusServer/controller/api/sys_jwt_blacklist.go
+28
-0
QMPlusServer/init/initRouter/init_router.go
QMPlusServer/init/initRouter/init_router.go
+2
-1
QMPlusServer/init/registTable/regist_table.go
QMPlusServer/init/registTable/regist_table.go
+1
-0
QMPlusServer/middleware/jwt.go
QMPlusServer/middleware/jwt.go
+12
-0
QMPlusServer/model/sysModel/sys_jwt_blacklist.go
QMPlusServer/model/sysModel/sys_jwt_blacklist.go
+23
-0
QMPlusServer/model/sysModel/sys_user.go
QMPlusServer/model/sysModel/sys_user.go
+3
-3
QMPlusServer/router/sys_jwt.go
QMPlusServer/router/sys_jwt.go
+14
-0
QMPlusVuePage/src/api/jwt.js
QMPlusVuePage/src/api/jwt.js
+16
-0
QMPlusVuePage/src/store/module/user.js
QMPlusVuePage/src/store/module/user.js
+7
-0
QMPlusVuePage/src/utils/request.js
QMPlusVuePage/src/utils/request.js
+6
-4
QMPlusVuePage/src/view/layout/index.vue
QMPlusVuePage/src/view/layout/index.vue
+2
-2
未找到文件。
QMPlusServer/controller/api/sys_jwt_blacklist.go
0 → 100644
浏览文件 @
4aa116cd
package
api
import
(
"fmt"
"gin-vue-admin/controller/servers"
"gin-vue-admin/model/sysModel"
"github.com/gin-gonic/gin"
)
// @Tags jwt
// @Summary jwt加入黑名单
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Success 200 {string} string "{"success":true,"data":{},"msg":"拉黑成功"}"
// @Router /jwt/jsonInBlacklist [post]
func
JsonInBlacklist
(
c
*
gin
.
Context
){
token
:=
c
.
Request
.
Header
.
Get
(
"x-token"
)
ModelJwt
:=
sysModel
.
JwtBlacklist
{
Jwt
:
token
,
}
err
:=
ModelJwt
.
JsonInBlacklist
()
if
err
!=
nil
{
servers
.
ReportFormat
(
c
,
false
,
fmt
.
Sprintf
(
"jwt作废失败,%v"
,
err
),
gin
.
H
{})
}
else
{
servers
.
ReportFormat
(
c
,
true
,
"jwt作废成功"
,
gin
.
H
{})
}
}
QMPlusServer/init/initRouter/init_router.go
浏览文件 @
4aa116cd
...
...
@@ -24,6 +24,7 @@ func InitRouter() *gin.Engine {
router
.
InitApiRouter
(
ApiGroup
)
// 注册功能api路由
router
.
InitFileUploadAndDownloadRouter
(
ApiGroup
)
// 文件上传下载功能路由
router
.
InitWorkflowRouter
(
ApiGroup
)
// 工作流相关路由
router
.
InitCasbinRouter
(
ApiGroup
)
router
.
InitCasbinRouter
(
ApiGroup
)
// 权限相关路由
router
.
InitJwtRouter
(
ApiGroup
)
// jwt相关路由
return
Router
}
QMPlusServer/init/registTable/regist_table.go
浏览文件 @
4aa116cd
...
...
@@ -13,6 +13,7 @@ func RegistTable(db *gorm.DB) {
sysModel
.
SysMenu
{},
sysModel
.
SysApi
{},
sysModel
.
SysBaseMenu
{},
sysModel
.
JwtBlacklist
{},
dbModel
.
ExaFileUploadAndDownload
{},
sysModel
.
SysWorkflow
{},
sysModel
.
SysWorkflowStepInfo
{},
...
...
QMPlusServer/middleware/jwt.go
浏览文件 @
4aa116cd
...
...
@@ -3,6 +3,7 @@ package middleware
import
(
"errors"
"gin-vue-admin/controller/servers"
"gin-vue-admin/model/sysModel"
"github.com/dgrijalva/jwt-go"
"github.com/gin-gonic/gin"
uuid
"github.com/satori/go.uuid"
...
...
@@ -13,6 +14,9 @@ func JWTAuth() gin.HandlerFunc {
return
func
(
c
*
gin
.
Context
)
{
// 我们这里jwt鉴权取头部信息 x-token 登录时回返回token信息 这里前端需要把token存储到cookie或者本地localSstorage中 不过需要跟后端协商过期时间 可以约定刷新令牌或者重新登录
token
:=
c
.
Request
.
Header
.
Get
(
"x-token"
)
ModelToken
:=
sysModel
.
JwtBlacklist
{
Jwt
:
token
,
}
if
token
==
""
{
servers
.
ReportFormat
(
c
,
false
,
"未登录或非法访问"
,
gin
.
H
{
"reload"
:
true
,
...
...
@@ -20,6 +24,13 @@ func JWTAuth() gin.HandlerFunc {
c
.
Abort
()
return
}
if
ModelToken
.
IsBlacklist
(
token
){
servers
.
ReportFormat
(
c
,
false
,
"授权已失效"
,
gin
.
H
{
"reload"
:
true
,
})
c
.
Abort
()
return
}
j
:=
NewJWT
()
// parseToken 解析token包含的信息
claims
,
err
:=
j
.
ParseToken
(
token
)
...
...
@@ -135,3 +146,4 @@ func (j *JWT) RefreshToken(tokenString string) (string, error) {
}
return
""
,
TokenInvalid
}
QMPlusServer/model/sysModel/sys_jwt_blacklist.go
0 → 100644
浏览文件 @
4aa116cd
package
sysModel
import
(
"gin-vue-admin/init/qmsql"
"github.com/jinzhu/gorm"
)
type
JwtBlacklist
struct
{
gorm
.
Model
Jwt
string
`gorm:"type:text"`
}
func
(
j
*
JwtBlacklist
)
JsonInBlacklist
()(
err
error
){
err
=
qmsql
.
DEFAULTDB
.
Create
(
j
)
.
Error
return
}
//判断JWT是否在黑名单内部
func
(
j
*
JwtBlacklist
)
IsBlacklist
(
Jwt
string
)(
bool
){
isNotFound
:=
qmsql
.
DEFAULTDB
.
Where
(
"jwt = ?"
,
Jwt
)
.
First
(
j
)
.
RecordNotFound
()
return
!
isNotFound
}
\ No newline at end of file
QMPlusServer/model/sysModel/sys_user.go
浏览文件 @
4aa116cd
...
...
@@ -29,9 +29,9 @@ type SysUser struct {
func
(
u
*
SysUser
)
Regist
()
(
err
error
,
userInter
*
SysUser
)
{
var
user
SysUser
//判断用户名是否注册
findErr
:=
qmsql
.
DEFAULTDB
.
Where
(
"username = ?"
,
u
.
Username
)
.
First
(
&
user
)
.
Error
//
err为nil
表明读取到了 不能注册
if
findErr
==
nil
{
notResigt
:=
qmsql
.
DEFAULTDB
.
Where
(
"username = ?"
,
u
.
Username
)
.
First
(
&
user
)
.
RecordNotFound
()
//
notResigt为false
表明读取到了 不能注册
if
!
notResigt
{
return
errors
.
New
(
"用户名已注册"
),
nil
}
else
{
// 否则 附加uuid 密码md5简单加密 注册
...
...
QMPlusServer/router/sys_jwt.go
0 → 100644
浏览文件 @
4aa116cd
package
router
import
(
"gin-vue-admin/controller/api"
"gin-vue-admin/middleware"
"github.com/gin-gonic/gin"
)
func
InitJwtRouter
(
Router
*
gin
.
RouterGroup
)
{
ApiRouter
:=
Router
.
Group
(
"jwt"
)
.
Use
(
middleware
.
JWTAuth
())
.
Use
(
middleware
.
CasbinHandler
())
{
ApiRouter
.
POST
(
"jsonInBlacklist"
,
api
.
JsonInBlacklist
)
//jwt加入黑名单
}
}
\ No newline at end of file
QMPlusVuePage/src/api/jwt.js
0 → 100644
浏览文件 @
4aa116cd
import
service
from
'
@/utils/request
'
// @Tags jwt
// @Summary jwt加入黑名单
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Success 200 {string} string "{"success":true,"data":{},"msg":"拉黑成功"}"
// @Router /jwt/jsonInBlacklist [post]
export
const
jsonInBlacklist
=
()
=>
{
return
service
({
url
:
"
/jwt/jsonInBlacklist
"
,
method
:
'
post
'
,
})
}
\ No newline at end of file
QMPlusVuePage/src/store/module/user.js
浏览文件 @
4aa116cd
import
{
login
}
from
'
@/api/user
'
import
{
jsonInBlacklist
}
from
'
@/api/jwt
'
import
router
from
'
@/router/index
'
export
const
user
=
{
namespaced
:
true
,
...
...
@@ -52,6 +53,12 @@ export const user = {
router
.
push
({
path
:
'
/layout/dashbord
'
})
}
}
},
async
LoginOut
({
commit
})
{
const
res
=
await
jsonInBlacklist
()
if
(
res
.
success
)
{
commit
(
"
LoginOut
"
)
}
}
},
getters
:
{
...
...
QMPlusVuePage/src/utils/request.js
浏览文件 @
4aa116cd
...
...
@@ -61,11 +61,13 @@ service.interceptors.response.use(
Message
({
showClose
:
true
,
message
:
response
.
data
.
msg
,
type
:
'
error
'
type
:
'
error
'
,
onClose
:
()
=>
{
if
(
response
.
data
.
data
&&
response
.
data
.
data
.
reload
)
{
store
.
commit
(
'
user/LoginOut
'
)
}
}
})
if
(
response
.
data
.
data
&&
response
.
data
.
data
.
reload
)
{
store
.
commit
(
'
user/LoginOut
'
)
}
return
Promise
.
reject
(
response
.
data
.
msg
)
}
},
...
...
QMPlusVuePage/src/view/layout/index.vue
浏览文件 @
4aa116cd
...
...
@@ -51,7 +51,7 @@
<
script
>
import
Aside
from
'
@/view/layout/aside
'
import
{
mapGetters
,
map
Muta
tions
}
from
'
vuex
'
import
{
mapGetters
,
map
Ac
tions
}
from
'
vuex
'
export
default
{
name
:
'
Layout
'
,
data
()
{
...
...
@@ -63,7 +63,7 @@ export default {
Aside
},
methods
:
{
...
map
Muta
tions
(
'
user
'
,
[
'
LoginOut
'
]),
...
map
Ac
tions
(
'
user
'
,
[
'
LoginOut
'
]),
totalCollapse
()
{
this
.
isCollapse
=
!
this
.
isCollapse
this
.
$bus
.
emit
(
'
totalCollapse
'
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录