完成前端页面路由守卫
This commit is contained in:
parent
b03fb8fdb5
commit
1bca3653b1
@ -1,5 +1,18 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import {get} from "@/net";
|
||||||
|
import {useStore} from "@/stores";
|
||||||
|
import router from "@/router";
|
||||||
|
|
||||||
|
const store = useStore()
|
||||||
|
|
||||||
|
if(store.auth.user == null) {
|
||||||
|
get('/api/user/me', (message) => {
|
||||||
|
store.auth.user = message
|
||||||
|
router.push('/index')
|
||||||
|
}, () => {
|
||||||
|
store.auth.user = null
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -40,8 +40,11 @@
|
|||||||
import {User, Lock} from '@element-plus/icons-vue'
|
import {User, Lock} from '@element-plus/icons-vue'
|
||||||
import {reactive} from "vue";
|
import {reactive} from "vue";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
import {post} from "@/net";
|
import {get, post} from "@/net";
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
|
import {useStore} from "@/stores";
|
||||||
|
|
||||||
|
const store = useStore()
|
||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
username: '',
|
username: '',
|
||||||
@ -59,7 +62,12 @@ const login = () => {
|
|||||||
remember: form.remember
|
remember: form.remember
|
||||||
}, (message) => {
|
}, (message) => {
|
||||||
ElMessage.success(message)
|
ElMessage.success(message)
|
||||||
router.push('/index')
|
get('/api/user/me', (message) => {
|
||||||
|
store.auth.user = message
|
||||||
|
router.push('/index')
|
||||||
|
}, () => {
|
||||||
|
store.auth.user = null
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { createRouter, createWebHistory } from 'vue-router'
|
import { createRouter, createWebHistory } from 'vue-router'
|
||||||
|
import {useStore} from "@/stores";
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
history: createWebHistory(import.meta.env.BASE_URL),
|
history: createWebHistory(import.meta.env.BASE_URL),
|
||||||
@ -30,4 +31,17 @@ const router = createRouter({
|
|||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
router.beforeEach((to, from, next) => {
|
||||||
|
const store = useStore()
|
||||||
|
if(store.auth.user != null && to.name.startsWith('welcome-')) {
|
||||||
|
next('/index')
|
||||||
|
} else if(store.auth.user == null && to.fullPath.startsWith('/index')) {
|
||||||
|
next('/')
|
||||||
|
} else if(to.matched.length === 0){
|
||||||
|
next('/index')
|
||||||
|
} else {
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
|
@ -1,12 +0,0 @@
|
|||||||
import { ref, computed } from 'vue'
|
|
||||||
import { defineStore } from 'pinia'
|
|
||||||
|
|
||||||
export const useCounterStore = defineStore('counter', () => {
|
|
||||||
const count = ref(0)
|
|
||||||
const doubleCount = computed(() => count.value * 2)
|
|
||||||
function increment() {
|
|
||||||
count.value++
|
|
||||||
}
|
|
||||||
|
|
||||||
return { count, doubleCount, increment }
|
|
||||||
})
|
|
9
study-project-frontend/src/stores/index.js
Normal file
9
study-project-frontend/src/stores/index.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import {ref, computed, reactive} from 'vue'
|
||||||
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
|
export const useStore = defineStore('store', () => {
|
||||||
|
const auth = reactive({
|
||||||
|
user: null
|
||||||
|
})
|
||||||
|
return { auth }
|
||||||
|
})
|
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
欢迎进入到学习平台
|
欢迎{{store.auth.user.username}}进入到学习平台
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-button @click="logout()" type="danger" plain>退出登录</el-button>
|
<el-button @click="logout()" type="danger" plain>退出登录</el-button>
|
||||||
@ -11,10 +11,14 @@
|
|||||||
import {get} from "@/net";
|
import {get} from "@/net";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
import router from "@/router";
|
import router from "@/router";
|
||||||
|
import {useStore} from "@/stores";
|
||||||
|
|
||||||
|
const store = useStore()
|
||||||
|
|
||||||
const logout = () => {
|
const logout = () => {
|
||||||
get('/api/auth/logout', (message) => {
|
get('/api/auth/logout', (message) => {
|
||||||
ElMessage.success(message)
|
ElMessage.success(message)
|
||||||
|
store.auth.user = null
|
||||||
router.push('/')
|
router.push('/')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user