Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wiki-js
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
wiki-js
Commits
aa08459d
Commit
aa08459d
authored
Oct 12, 2018
by
Nicolas Giard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: token refresh
parent
3abd2f91
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
34 additions
and
26 deletions
+34
-26
login.vue
client/components/login.vue
+3
-3
_md2.scss
client/scss/layout/_md2.scss
+12
-2
auth.js
server/graph/directives/auth.js
+8
-5
security.js
server/helpers/security.js
+9
-11
auth.js
server/middlewares/auth.js
+0
-3
users.js
server/models/users.js
+2
-2
No files found.
client/components/login.vue
View file @
aa08459d
...
...
@@ -11,7 +11,7 @@
offset-xl4, xl4
)
transition(name='zoom')
v-card.elevation-5.
radius-7
(v-show='isShown')
v-card.elevation-5.
md2
(v-show='isShown')
v-toolbar(color='primary', flat, dense, dark)
v-spacer
.subheading(v-if='screen === "tfa"')
{{
$t
(
'auth:tfa.subtitle'
)
}}
...
...
@@ -59,7 +59,7 @@
)
v-card-actions.pb-4
v-spacer
v-btn(
v-btn
.md2
(
v-if='screen === "login"'
block
large
...
...
@@ -68,7 +68,7 @@
round
:loading='isLoading'
)
{{
$t
(
'auth:actions.login'
)
}}
v-btn(
v-btn
.md2
(
v-if='screen === "tfa"'
block
large
...
...
client/scss/layout/_md2.scss
View file @
aa08459d
.md2
{
&
.v-text-field
.v-input__slot
{
border-radius
:
28px
;
&
.v-text-field
{
.v-input__slot
{
border-radius
:
7px
;
}
}
&
.v-btn
{
border-radius
:
7px
;
}
&
.v-card
{
border-radius
:
7px
;
}
}
server/graph/directives/auth.js
View file @
aa08459d
const
{
SchemaDirectiveVisitor
}
=
require
(
'graphql-tools'
)
const
{
defaultFieldResolver
}
=
require
(
'graphql'
)
const
_
=
require
(
'lodash'
)
class
AuthDirective
extends
SchemaDirectiveVisitor
{
visitObject
(
type
)
{
...
...
@@ -39,11 +40,13 @@ class AuthDirective extends SchemaDirectiveVisitor {
}
const
context
=
args
[
2
]
console
.
info
(
context
.
req
.
user
)
// const user = await getUser(context.headers.authToken)
// if (!user.hasRole(requiredScopes)) {
// throw new Error('not authorized')
// }
if
(
!
context
.
req
.
user
)
{
throw
new
Error
(
'Unauthorized'
)
}
if
(
!
_
.
some
(
context
.
req
.
user
.
permissions
,
pm
=>
_
.
includes
(
requiredScopes
,
pm
)))
{
throw
new
Error
(
'Forbidden'
)
}
return
resolve
.
apply
(
this
,
args
)
}
...
...
server/helpers/security.js
View file @
aa08459d
...
...
@@ -24,16 +24,14 @@ module.exports = {
})
},
async
extractJWT
(
req
)
{
return
passportJWT
.
ExtractJwt
.
fromExtractors
([
passportJWT
.
ExtractJwt
.
fromAuthHeaderAsBearerToken
(),
(
req
)
=>
{
let
token
=
null
if
(
req
&&
req
.
cookies
)
{
token
=
req
.
cookies
[
'jwt'
]
}
return
token
extractJWT
:
passportJWT
.
ExtractJwt
.
fromExtractors
([
passportJWT
.
ExtractJwt
.
fromAuthHeaderAsBearerToken
(),
(
req
)
=>
{
let
token
=
null
if
(
req
&&
req
.
cookies
)
{
token
=
req
.
cookies
[
'jwt'
]
}
])(
req
)
}
return
token
}
])
}
server/middlewares/auth.js
View file @
aa08459d
...
...
@@ -13,12 +13,9 @@ module.exports = {
WIKI
.
auth
.
passport
.
authenticate
(
'jwt'
,
{
session
:
false
},
async
(
err
,
user
,
info
)
=>
{
if
(
err
)
{
return
next
()
}
console
.
info
(
err
,
user
,
info
)
// Expired but still valid within 7 days, just renew
if
(
info
instanceof
jwt
.
TokenExpiredError
&&
moment
().
subtract
(
7
,
'days'
).
isBefore
(
info
.
expiredAt
))
{
const
jwtPayload
=
jwt
.
decode
(
securityHelper
.
extractJWT
(
req
))
console
.
info
(
jwtPayload
)
try
{
const
newToken
=
await
WIKI
.
models
.
users
.
refreshToken
(
jwtPayload
.
id
)
user
=
newToken
.
user
...
...
server/models/users.js
View file @
aa08459d
...
...
@@ -252,9 +252,9 @@ module.exports = class User extends Model {
timezone
:
user
.
timezone
,
localeCode
:
user
.
localeCode
,
defaultEditor
:
user
.
defaultEditor
,
permissions
:
[]
permissions
:
[
'manage:system'
]
},
WIKI
.
config
.
sessionSecret
,
{
expiresIn
:
'
10s
'
,
expiresIn
:
'
30m
'
,
audience
:
'urn:wiki.js'
,
// TODO: use value from admin
issuer
:
'urn:wiki.js'
}),
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment