diff --git a/src/components/Signin.vue b/src/components/Signin.vue index e25dc40..4ca3969 100644 --- a/src/components/Signin.vue +++ b/src/components/Signin.vue @@ -24,6 +24,7 @@ import storage from '../storage' import SeasonedInput from '@/components/ui/SeasonedInput' import SeasonedButton from '@/components/ui/SeasonedButton' import SeasonedMessages from '@/components/ui/SeasonedMessages' +import { parseJwt } from '@/utils' export default { components: { SeasonedInput, SeasonedButton, SeasonedMessages }, @@ -45,9 +46,10 @@ export default { login(username, password) .then(data => { if (data.success){ + const jwtData = parseJwt(data.token) localStorage.setItem('token', data.token); - localStorage.setItem('username', username); - localStorage.setItem('admin', data.admin || false); + localStorage.setItem('username', jwtData['username']); + localStorage.setItem('admin', jwtData['admin'] || false); eventHub.$emit('setUserStatus'); this.$router.push({ name: 'profile' }) diff --git a/src/utils.js b/src/utils.js index 53c581b..73de161 100644 --- a/src/utils.js +++ b/src/utils.js @@ -7,7 +7,17 @@ const sortableSize = (string) => { const exponent = UNITS.indexOf(unit) * 3 return numStr * (Math.pow(10, exponent)) -} +}; + +const parseJwt = (token) => { + var base64Url = token.split('.')[1]; + var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); + var jsonPayload = decodeURIComponent(atob(base64).split('').map(function(c) { + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); + }).join('')); + + return JSON.parse(jsonPayload); +}; -export { sortableSize } \ No newline at end of file +export { sortableSize, parseJwt } \ No newline at end of file