Added frontend set_token
This commit is contained in:
		@@ -1,11 +1,11 @@
 | 
				
			|||||||
<script setup async lang="ts">
 | 
					<script setup async lang="ts">
 | 
				
			||||||
import { provide, ref } from 'vue';
 | 
					import { provide, ref } from 'vue';
 | 
				
			||||||
import { useRouter } from 'vue-router';
 | 
					import { useRouter } from 'vue-router';
 | 
				
			||||||
import { Auth, TokenInjectType, isErrorResponse } from '@/api';
 | 
					import { TokenInjectType } from '@/api';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const router = useRouter();
 | 
					const router = useRouter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const jwt = ref<string | null>(null);
 | 
					const jwt = ref<string | null>(localStorage.getItem('token'));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function setToken(token: string) {
 | 
					function setToken(token: string) {
 | 
				
			||||||
	jwt.value = token;
 | 
						jwt.value = token;
 | 
				
			||||||
@@ -18,14 +18,6 @@ function logout() {
 | 
				
			|||||||
	router.push({ name: 'login' });
 | 
						router.push({ name: 'login' });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
jwt.value = localStorage.getItem('token');
 | 
					 | 
				
			||||||
if (jwt.value == null) await router.push({ name: 'login' });
 | 
					 | 
				
			||||||
else {
 | 
					 | 
				
			||||||
	const new_token = await Auth.refresh_token(jwt.value ?? '');
 | 
					 | 
				
			||||||
	if (isErrorResponse(new_token)) logout();
 | 
					 | 
				
			||||||
	else setToken(new_token.jwt);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
provide<TokenInjectType>('jwt', {
 | 
					provide<TokenInjectType>('jwt', {
 | 
				
			||||||
	jwt,
 | 
						jwt,
 | 
				
			||||||
	setToken,
 | 
						setToken,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,10 +4,12 @@ import SignupView from '@/views/SignupView.vue';
 | 
				
			|||||||
import HomeView from '@/views/HomeView.vue';
 | 
					import HomeView from '@/views/HomeView.vue';
 | 
				
			||||||
import AboutView from '@/views/AboutView.vue';
 | 
					import AboutView from '@/views/AboutView.vue';
 | 
				
			||||||
import FSView from '@/views/FSView.vue';
 | 
					import FSView from '@/views/FSView.vue';
 | 
				
			||||||
 | 
					import SetTokenView from '@/views/SetTokenView.vue';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const routes: Array<RouteRecordRaw> = [
 | 
					const routes: Array<RouteRecordRaw> = [
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		path: '/',
 | 
							path: '/',
 | 
				
			||||||
 | 
							name: 'home',
 | 
				
			||||||
		component: HomeView
 | 
							component: HomeView
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -25,6 +27,10 @@ const routes: Array<RouteRecordRaw> = [
 | 
				
			|||||||
		name: 'signup',
 | 
							name: 'signup',
 | 
				
			||||||
		component: SignupView
 | 
							component: SignupView
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							path: '/set_token',
 | 
				
			||||||
 | 
							component: SetTokenView
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		path: '/fs/:node_id',
 | 
							path: '/fs/:node_id',
 | 
				
			||||||
		name: 'fs',
 | 
							name: 'fs',
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								frontend/src/views/SetTokenView.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								frontend/src/views/SetTokenView.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					<script setup lang="ts">
 | 
				
			||||||
 | 
					import { inject } from 'vue';
 | 
				
			||||||
 | 
					import { TokenInjectType } from '@/api';
 | 
				
			||||||
 | 
					import { useRoute, useRouter } from 'vue-router';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const router = useRouter();
 | 
				
			||||||
 | 
					const route = useRoute();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const jwt = inject<TokenInjectType>('jwt') as TokenInjectType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ('token' in route.query) jwt.setToken(route.query['token'] as string);
 | 
				
			||||||
 | 
					router.replace({ path: '/' });
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
						<router-link to="home">Click here to go home</router-link>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped></style>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user