Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
nizhengjia888
gin-vue-admin
提交
da560841
G
gin-vue-admin
项目概览
nizhengjia888
/
gin-vue-admin
与 Fork 源项目一致
Fork自
FLIPPED-AURORA / gin-vue-admin
通知
3
Star
0
Fork
0
代码
文件
提交
分支
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,发现更多精彩内容 >>
提交
da560841
编写于
12月 19, 2020
作者:
Mr.奇淼(
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'gva_gormv2_dev' of
https://github.com/flipped-aurora/gin-vue-admin
上级
ae4ff9fc
96a8a225
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
113 addition
and
88 deletion
+113
-88
server/api/v1/sys_user.go
server/api/v1/sys_user.go
+4
-4
server/config.yaml
server/config.yaml
+2
-0
server/config/jwt.go
server/config/jwt.go
+3
-1
server/middleware/jwt.go
server/middleware/jwt.go
+1
-1
server/service/jwt_black_list.go
server/service/jwt_black_list.go
+1
-1
web/debug.log
web/debug.log
+0
-1
web/package-lock.json
web/package-lock.json
+88
-61
web/src/store/module/user.js
web/src/store/module/user.js
+1
-0
web/src/view/login/login.vue
web/src/view/login/login.vue
+13
-19
未找到文件。
server/api/v1/sys_user.go
浏览文件 @
da560841
...
...
@@ -50,11 +50,11 @@ func tokenNext(c *gin.Context, user model.SysUser) {
NickName
:
user
.
NickName
,
Username
:
user
.
Username
,
AuthorityId
:
user
.
AuthorityId
,
BufferTime
:
60
*
60
*
24
,
// 缓冲时间1天 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
BufferTime
:
global
.
GVA_CONFIG
.
JWT
.
BufferTime
,
// 缓冲时间1天 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
StandardClaims
:
jwt
.
StandardClaims
{
NotBefore
:
time
.
Now
()
.
Unix
()
-
1000
,
// 签名生效时间
ExpiresAt
:
time
.
Now
()
.
Unix
()
+
60
*
60
*
24
*
7
,
// 过期时间 7天
Issuer
:
"qmPlus"
,
// 签名的发行者
NotBefore
:
time
.
Now
()
.
Unix
()
-
1000
,
// 签名生效时间
ExpiresAt
:
time
.
Now
()
.
Unix
()
+
global
.
GVA_CONFIG
.
JWT
.
ExpiresTime
,
// 过期时间 7天 配置文件
Issuer
:
"qmPlus"
,
// 签名的发行者
},
}
token
,
err
:=
j
.
CreateToken
(
claims
)
...
...
server/config.yaml
浏览文件 @
da560841
...
...
@@ -3,6 +3,8 @@
# jwt configuration
jwt
:
signing-key
:
'
qmPlus'
expires-time
:
604800
buffer-time
:
86400
# zap logger configuration
zap
:
...
...
server/config/jwt.go
浏览文件 @
da560841
package
config
type
JWT
struct
{
SigningKey
string
`mapstructure:"signing-key" json:"signingKey" yaml:"signing-key"`
SigningKey
string
`mapstructure:"signing-key" json:"signingKey" yaml:"signing-key"`
ExpiresTime
int64
`mapstructure:"expires-time" json:"expiresTime" yaml:"expires-time"`
BufferTime
int64
`mapstructure:"buffer-time" json:"bufferTime" yaml:"buffer-time"`
}
server/middleware/jwt.go
浏览文件 @
da560841
...
...
@@ -47,7 +47,7 @@ func JWTAuth() gin.HandlerFunc {
c
.
Abort
()
}
if
claims
.
ExpiresAt
-
time
.
Now
()
.
Unix
()
<
claims
.
BufferTime
{
claims
.
ExpiresAt
=
time
.
Now
()
.
Unix
()
+
60
*
60
*
24
*
7
claims
.
ExpiresAt
=
time
.
Now
()
.
Unix
()
+
global
.
GVA_CONFIG
.
JWT
.
ExpiresTime
newToken
,
_
:=
j
.
CreateToken
(
*
claims
)
newClaims
,
_
:=
j
.
ParseToken
(
newToken
)
c
.
Header
(
"new-token"
,
newToken
)
...
...
server/service/jwt_black_list.go
浏览文件 @
da560841
...
...
@@ -49,7 +49,7 @@ func GetRedisJWT(userName string) (err error, redisJWT string) {
func
SetRedisJWT
(
jwt
string
,
userName
string
)
(
err
error
)
{
// 此处过期时间等于jwt过期时间
timer
:=
60
*
60
*
24
*
7
*
time
.
Second
timer
:=
time
.
Duration
(
global
.
GVA_CONFIG
.
JWT
.
ExpiresTime
)
*
time
.
Second
err
=
global
.
GVA_REDIS
.
Set
(
userName
,
jwt
,
timer
)
.
Err
()
return
err
}
web/debug.log
已删除
100644 → 0
浏览文件 @
ae4ff9fc
[1110/113210.377:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
web/package-lock.json
浏览文件 @
da560841
...
...
@@ -3449,13 +3449,6 @@
"integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
"dev": true
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true,
"optional": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599659970&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz",
...
...
@@ -3483,31 +3476,12 @@
"path-exists": "^4.0.0"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
"dev": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz",
...
...
@@ -3673,16 +3647,6 @@
"ansi-regex": "^5.0.0"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"terser": {
"version": "4.8.0",
"resolved": "https://registry.npm.taobao.org/terser/download/terser-4.8.0.tgz?cache=0&sync_timestamp=1599751633316&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.8.0.tgz",
...
...
@@ -3721,31 +3685,6 @@
"punycode": "^2.1.1"
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.1.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.1.tgz",
"integrity": "sha512-wz/+HFg/3SBayHWAlZXARcnDTl3VOChrfW9YnxvAweiuyKX/7IGx1ad/4yJHmwhgWlOVYMAbTiI7GV8G33PfGQ==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
}
}
},
"wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
...
...
@@ -14998,6 +14937,94 @@
}
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.1.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.1.tgz",
"integrity": "sha512-wz/+HFg/3SBayHWAlZXARcnDTl3VOChrfW9YnxvAweiuyKX/7IGx1ad/4yJHmwhgWlOVYMAbTiI7GV8G33PfGQ==",
"dev": true,
"optional": true,
"requires": {
"chalk": "^4.1.0",
"hash-sum": "^2.0.0",
"loader-utils": "^2.0.0"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"optional": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"optional": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"optional": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"optional": true
},
"emojis-list": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true,
"optional": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"optional": true
},
"loader-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
"integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
"dev": true,
"optional": true,
"requires": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
}
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"optional": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"vue-particle-line": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/vue-particle-line/-/vue-particle-line-0.1.4.tgz",
...
...
web/src/store/module/user.js
浏览文件 @
da560841
...
...
@@ -46,6 +46,7 @@ export const user = {
}
else
{
router
.
push
({
path
:
'
/layout/dashboard
'
})
}
return
true
}
},
async
LoginOut
({
commit
})
{
...
...
web/src/view/login/login.vue
浏览文件 @
da560841
...
...
@@ -20,14 +20,9 @@
@
keyup.enter.native=
"submitForm"
>
<el-form-item
prop=
"username"
>
<el-input
placeholder=
"请输入用户名"
v-model=
"loginForm.username"
>
<i
class=
"el-input__icon el-icon-user"
slot=
"suffix"
></i></el-input>
<el-input
placeholder=
"请输入用户名"
v-model=
"loginForm.username"
>
<i
class=
"el-input__icon el-icon-user"
slot=
"suffix"
></i
></el-input>
</el-form-item>
<el-form-item
prop=
"password"
>
<el-input
...
...
@@ -42,12 +37,12 @@
></i>
</el-input>
</el-form-item>
<el-form-item
style=
"position:relative"
>
<el-form-item
style=
"position:
relative"
>
<el-input
v-model=
"loginForm.captcha"
name=
"logVerify"
placeholder=
"请输入验证码"
style=
"width:60%"
style=
"width:
60%"
/>
<div
class=
"vPic"
>
<img
...
...
@@ -61,7 +56,7 @@
</div>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"submitForm"
style=
"width:100%"
<el-button
type=
"primary"
@
click=
"submitForm"
style=
"width:
100%"
>
登 录
</el-button
>
</el-form-item>
...
...
@@ -83,9 +78,7 @@
><img
src=
"@/assets/video.png"
class=
"link-icon"
/></a>
</div>
<div
class=
"copyright"
>
Copyright
©
{{
curYear
}}
💖flipped-aurora
</div>
<div
class=
"copyright"
>
Copyright
©
{{
curYear
}}
💖flipped-aurora
</div>
</div>
</div>
</div>
...
...
@@ -135,13 +128,15 @@ export default {
methods
:
{
...
mapActions
(
"
user
"
,
[
"
LoginIn
"
]),
async
login
()
{
await
this
.
LoginIn
(
this
.
loginForm
);
return
await
this
.
LoginIn
(
this
.
loginForm
);
},
async
submitForm
()
{
this
.
$refs
.
loginForm
.
validate
(
async
(
v
)
=>
{
if
(
v
)
{
this
.
login
();
this
.
loginVefify
();
const
flag
=
await
this
.
login
();
if
(
!
flag
)
{
this
.
loginVefify
();
}
}
else
{
this
.
$message
({
type
:
"
error
"
,
...
...
@@ -167,6 +162,5 @@ export default {
</
script
>
<
style
scoped
lang=
"scss"
>
@import
'@/style/login.scss'
;
@import
"@/style/login.scss"
;
</
style
>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录