我正在尝试在我的主页上实现路由器警卫。用户被路由到登录页面从主页,如果他们没有通过身份验证。它工作正常,但问题是当我尝试登录后,被重定向到登录页面。一旦我点击我的登录按钮,我没有得到路由到我的主页,而是我留在登录页面,但它显示我已经通过身份验证。
这是我导航系统的密码
router.beforeEach((to, from, next) => {
const store = useAuthStore(pinia)
if (to.name !== 'login' && !store.isAuthenticated) {
next({ name: 'login' })
} else{
next()
}
})
这是登录的代码在我的商店里
async function handleSubmit() {
isLoading.value = true
if(pageType.value == 'signUp' && name.value != '' && email.value != '' && password.value != ''){
await axios.post(url.value, {
name: name.value,
email: email.value,
password: password.value
})
.then(() => {
pageType.value = "login"
isLoading.value = false
})
.catch((err) => {
console.log(err.response.data.message);
})
}else if(pageType.value == 'login' && email.value != '' && password.value != ''){
await axios.post(`${url.value}/login`, {
email: email.value,
password: password.value
})
.then( (res) => {
isLoading.value = false
const token = res.data.token;
localStorage.setItem('token', token);
axios.defaults.headers.common['Authorization'] = `Bearer ${token}`;
axios.get(`${url.value}/me`)
.then((res) => {
setUser(res.data)
router.push('/')
console.log(router.push('/'));
})
.catch((err) => {
console.log(err);
})
})
.catch((err) => {
console.log(err);
})
}
}
这是我用来检查用户是否通过身份验证的computed属性
const isAuthenticated = computed(() => {
return !!user.value
})
1条答案
按热度按时间eivgtgni1#
这应该可以修复它:
当
store.isAuthenticated
为true
时,将{ name: 'login' }
重定向到{ path: '/' }
。注:
next({ path: '/' })
会把用户带到你想让他们去的地方,如果不是这样,就相应地替换掉。/login
之前将最初请求的路由保存在存储器中,并且一旦用户已经认证,就使用保存的值在他们最初请求的路由上发送他们。