Changeset View
Changeset View
Standalone View
Standalone View
src/resources/js/app.js
Show First 20 Lines • Show All 44 Lines • ▼ Show 20 Lines | methods: { | ||||
return true | return true | ||||
} | } | ||||
} | } | ||||
} | } | ||||
return false | return false | ||||
}, | }, | ||||
// Set user state to "logged in" | // Set user state to "logged in" | ||||
loginUser(token, dashboard) { | loginUser(response, dashboard, update) { | ||||
if (!update) { | |||||
store.commit('logoutUser') // destroy old state data | store.commit('logoutUser') // destroy old state data | ||||
store.commit('loginUser') | store.commit('loginUser') | ||||
localStorage.setItem('token', token) | } | ||||
axios.defaults.headers.common.Authorization = 'Bearer ' + token | |||||
localStorage.setItem('token', response.access_token) | |||||
axios.defaults.headers.common.Authorization = 'Bearer ' + response.access_token | |||||
if (dashboard !== false) { | if (dashboard !== false) { | ||||
this.$router.push(store.state.afterLogin || { name: 'dashboard' }) | this.$router.push(store.state.afterLogin || { name: 'dashboard' }) | ||||
} | } | ||||
store.state.afterLogin = null | store.state.afterLogin = null | ||||
// Refresh the token before it expires | |||||
let timeout = response.expires_in || 0 | |||||
// We'll refresh 60 seconds before the token expires | |||||
// or immediately when we have no expiration time (on token re-use) | |||||
if (timeout > 60) { | |||||
timeout -= 60 | |||||
} | |||||
// TODO: We probably should try a few times in case of an error | |||||
// TODO: We probably should prevent axios from doing any requests | |||||
// while the token is being refreshed | |||||
this.refreshTimeout = setTimeout(() => { | |||||
axios.post('/api/auth/refresh').then(response => { | |||||
this.loginUser(response.data, false, true) | |||||
}) | |||||
}, timeout * 1000) | |||||
}, | }, | ||||
// Set user state to "not logged in" | // Set user state to "not logged in" | ||||
logoutUser() { | logoutUser() { | ||||
store.commit('logoutUser') | store.commit('logoutUser') | ||||
localStorage.setItem('token', '') | localStorage.setItem('token', '') | ||||
delete axios.defaults.headers.common.Authorization | delete axios.defaults.headers.common.Authorization | ||||
this.$router.push({ name: 'login' }) | this.$router.push({ name: 'login' }) | ||||
clearTimeout(this.refreshTimeout) | |||||
}, | }, | ||||
// Display "loading" overlay inside of the specified element | // Display "loading" overlay inside of the specified element | ||||
addLoader(elem) { | addLoader(elem) { | ||||
$(elem).css({position: 'relative'}).append($(loader).addClass('small')) | $(elem).css({position: 'relative'}).append($(loader).addClass('small')) | ||||
}, | }, | ||||
// Remove loader element added in addLoader() | // Remove loader element added in addLoader() | ||||
removeLoader(elem) { | removeLoader(elem) { | ||||
$(elem).find('.app-loader').remove() | $(elem).find('.app-loader').remove() | ||||
▲ Show 20 Lines • Show All 246 Lines • Show Last 20 Lines |