vue3.2/Vite/Ts34: 退出登录业务
·
Yin灏
退出登录
- src/lauout/tabbar/setting/index.vue
<script setup lang="ts">
//...
import { useRouter } from "vue-router";
$router = useRouter();
//...
import useUserStore from "@/store/modules/user";
let userStore = useUserStore();
//...
const logout = () => {
// 1. 需要向服务器发送请求,告诉服务器 token 过期
// 2. 用户小仓库中用户相关的数据要清空
// 3. 跳转到登录页面
userStore.userLogout();
// 跳转
$router.push({
path: "/login",
});
};
</script>
处理退出具体逻辑
- src/store/modules/user.ts
//...
actions: {
// 退出登录
userLogout() {
this.token = '';
this.username = '';
this.avatar = '';
localStorage.removeItem('TOKEN');
}
}
//...
体验优化
从哪个页面退出,当再次登录成功的时候,还是要跳转到那个页面
<script setup lang="ts">
//...
import { useRouter, useRoute } from "vue-router";
$router = useRouter();
//...
import useUserStore from "@/store/modules/user";
let userStore = useUserStore();
// 获取路由对象
let $route = useRoute();
//...
const logout = () => {
// 1. 需要向服务器发送请求,告诉服务器 token 过期
// 2. 用户小仓库中用户相关的数据要清空
// 3. 跳转到登录页面
userStore.userLogout();
// 跳转
$router.push({
path: "/login",
query: {
redirect: $route.path,
},
});
};
</script>
登录的时候获取 url 中的参数,进行对应的跳转
- src/views/login/index.vue
<script setup lang="ts">
//...
import { useRouter, useRoute } from "vue-router";
//...
$router = useRouter();
// 获取路由对象
let $route = useRoute();
//...
const login = () => {
//...
let redirect: any = $route.query.redirect;
$router.push({
path: redirect || "",
});
//...
};
</script>
路由守卫处理
- 登录成功之后就不能访问登录页面
- 没登录不能访问首页
- 用户数据持久化保存