Implemented auth renewal (#5)
This commit is contained in:
parent
3acec3dc25
commit
4db6d98011
@ -5,6 +5,8 @@ import auth0 from 'auth0-js'
|
|||||||
import AUTH_CONFIG from './auth0-variables'
|
import AUTH_CONFIG from './auth0-variables'
|
||||||
import mutations from '@/store/mutation-types'
|
import mutations from '@/store/mutation-types'
|
||||||
|
|
||||||
|
var tokenRenewalTimeout
|
||||||
|
|
||||||
export default class AuthService {
|
export default class AuthService {
|
||||||
|
|
||||||
constructor () {
|
constructor () {
|
||||||
@ -17,7 +19,7 @@ export default class AuthService {
|
|||||||
auth0 = new auth0.WebAuth({
|
auth0 = new auth0.WebAuth({
|
||||||
domain: AUTH_CONFIG.domain,
|
domain: AUTH_CONFIG.domain,
|
||||||
clientID: AUTH_CONFIG.clientId,
|
clientID: AUTH_CONFIG.clientId,
|
||||||
redirectUri: AUTH_CONFIG.callbackUrl,
|
redirectUri: AUTH_CONFIG.appDomain + AUTH_CONFIG.callbackUrl,
|
||||||
audience: `https://${AUTH_CONFIG.domain}/userinfo`,
|
audience: `https://${AUTH_CONFIG.domain}/userinfo`,
|
||||||
responseType: 'token id_token',
|
responseType: 'token id_token',
|
||||||
scope: 'openid profile email'
|
scope: 'openid profile email'
|
||||||
@ -78,6 +80,16 @@ export default class AuthService {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scheduleRenewal () {
|
||||||
|
let expiresAt = JSON.parse(localStorage.getItem('expires_at'))
|
||||||
|
let delay = expiresAt - Date.now()
|
||||||
|
if (delay > 0) {
|
||||||
|
tokenRenewalTimeout = setTimeout(() => {
|
||||||
|
this.renewToken()
|
||||||
|
}, delay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setSession (authResult) {
|
setSession (authResult) {
|
||||||
// Set the time that the access token will expire at
|
// Set the time that the access token will expire at
|
||||||
let expiresAt = JSON.stringify(
|
let expiresAt = JSON.stringify(
|
||||||
@ -86,10 +98,30 @@ export default class AuthService {
|
|||||||
localStorage.setItem('access_token', authResult.accessToken)
|
localStorage.setItem('access_token', authResult.accessToken)
|
||||||
localStorage.setItem('id_token', authResult.idToken)
|
localStorage.setItem('id_token', authResult.idToken)
|
||||||
localStorage.setItem('expires_at', expiresAt)
|
localStorage.setItem('expires_at', expiresAt)
|
||||||
|
this.scheduleRenewal()
|
||||||
|
}
|
||||||
|
|
||||||
|
renewToken () {
|
||||||
|
console.log('attempting renewal...')
|
||||||
|
this.auth0.renewAuth(
|
||||||
|
{
|
||||||
|
audience: `https://${AUTH_CONFIG.domain}/userinfo`,
|
||||||
|
redirectUri: `${AUTH_CONFIG.appDomain}/static/silent.html`,
|
||||||
|
usePostMessage: true
|
||||||
|
},
|
||||||
|
(err, result) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err)
|
||||||
|
} else {
|
||||||
|
this.setSession(result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
logout (store, router) {
|
logout (store, router) {
|
||||||
// Clear access token and ID token from local storage
|
// Clear access token and ID token from local storage
|
||||||
|
clearTimeout(tokenRenewalTimeout)
|
||||||
localStorage.removeItem('access_token')
|
localStorage.removeItem('access_token')
|
||||||
localStorage.removeItem('id_token')
|
localStorage.removeItem('id_token')
|
||||||
localStorage.removeItem('expires_at')
|
localStorage.removeItem('expires_at')
|
||||||
|
@ -34,6 +34,7 @@ export default new Vuex.Store({
|
|||||||
state: {
|
state: {
|
||||||
user: JSON.parse(localStorage.getItem('user_profile') || '{}'),
|
user: JSON.parse(localStorage.getItem('user_profile') || '{}'),
|
||||||
isAuthenticated: (() => {
|
isAuthenticated: (() => {
|
||||||
|
this.auth0.scheduleRenewal()
|
||||||
if (this.auth0.isAuthenticated()) {
|
if (this.auth0.isAuthenticated()) {
|
||||||
api.setBearer(localStorage.getItem('id_token'))
|
api.setBearer(localStorage.getItem('id_token'))
|
||||||
}
|
}
|
||||||
|
22
src/app/static/silent.html
Normal file
22
src/app/static/silent.html
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<script src="https://cdn.auth0.com/js/auth0/8.9/auth0.min.js"></script>
|
||||||
|
<script>
|
||||||
|
var webAuth = new auth0.WebAuth({
|
||||||
|
domain: 'djs-consulting.auth0.com',
|
||||||
|
clientID: 'Of2s0RQCQ3mt3dwIkOBY5h85J9sXbF2n',
|
||||||
|
scope: 'openid profile email',
|
||||||
|
responseType: 'token id_token',
|
||||||
|
redirectUri: 'http://localhost:3000/static/silent.html'
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
<script>
|
||||||
|
webAuth.parseHash(window.location.hash, function (err, response) {
|
||||||
|
parent.postMessage(err || response, 'http://localhost:3000');
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user