javascript - 如果用户已登录,Vue Router 不应重定向
问题描述
我将 Firebase 身份验证与 Vuejs 和 Vue Router 一起使用。我有主页、登录、注册和任务页面。我希望当用户登录并进入登录或注册页面时,他将被重定向到任务页面,但如果他进入主页,他不应该被重定向到任务页面。我不知道如何配置它并寻求帮助。
我有以下代码:
const routes = [
{
path: '/',
name: 'Home',
component: Home
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/signup',
name: 'SignUp',
component: SignUp
},
{
path: '/tasks',
name: 'Tasks',
component: Tasks,
meta: {
requiresAuth: true
}
},
{ path: "*", redirect: {path: '/'} }
]
const router = new VueRouter({
mode: "history",
routes
});
router.beforeEach((to, from, next) => {
const currentUser = firebase.auth().currentUser;
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
if (requiresAuth && !currentUser) next('login');
else if (!requiresAuth && currentUser){next('tasks')}
else next();
});
let app;
firebase.auth().onAuthStateChanged(function () {
if(!app){
new Vue({
router,
render (h) {
return h(App)
}
}).$mount('#app');
}
});
解决方案
我在 Home 路径中添加了一个元标记,并在路由器函数中添加了一个 if 子句。
解决方案代码:
const routes = [
{
path: '/',
name: 'Home',
component: Home,
// I added this meta tag to the Home path.
meta: {
loggedin: true
}
},
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/signup',
name: 'SignUp',
component: SignUp
},
{
path: '/tasks',
name: 'Tasks',
component: Tasks,
meta: {
requiresAuth: true
}
},
{ path: "*", redirect: {path: '/'} }
]
const router = new VueRouter({
mode: "history",
routes
});
router.beforeEach((to, from, next) => {
const currentUser = firebase.auth().currentUser;
const requiresAuth = to.matched.some(record => record.meta.requiresAuth);
const loggedin = to.matched.some(record => record.meta.loggedin);
// I added the if clause under this text.
if (loggedin && currentUser) next();
else if (requiresAuth && !currentUser) next('login');
else if (!requiresAuth && currentUser) next('tasks');
else next();
});
let app;
firebase.auth().onAuthStateChanged(function () {
if(!app){
new Vue({
router,
render (h) {
return h(App)
}
}).$mount('#app');
}
});
解决方案
推荐阅读
- python - 创建单词列表并按索引分组
- osgi - AEM - 版本化的客户端库配置冲突
- java - Thymeleaf:org.thymeleaf.exceptions.TemplateInputException
- javascript - Webpack 不使用背景图像在浏览器中显示 png 图像
- typeorm - 如何将typeorm的querybuilder的where转换为Repository的FindConditions,就像Sequelize一样?
- mongoose - 从 MongoDB 获取随机用户
- c# - “+”字符导致 IIS URL 重写问题
- flutter - firebase 推送通知将多行添加到有效负载正文
- node.js - 当我尝试获取我的 api 时出现 CORS 错误
- python - 即兴运行时的应用/ lambda