axios Vue路径和导航防护装置路径不正确

eh57zj3b  于 2023-03-12  发布在  iOS
关注(0)|答案(1)|浏览(150)

我正在尝试在我的主页上实现路由器警卫。用户被路由到登录页面从主页,如果他们没有通过身份验证。它工作正常,但问题是当我尝试登录后,被重定向到登录页面。一旦我点击我的登录按钮,我没有得到路由到我的主页,而是我留在登录页面,但它显示我已经通过身份验证。
这是我导航系统的密码

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
 })
eivgtgni

eivgtgni1#

这应该可以修复它:

router.beforeEach((to, from, next) => {
  const store = useAuthStore(pinia)
  if (to.name !== 'login' && !store.isAuthenticated) {
    next({ name: 'login' })
  } else if (to.name === 'login' && store.isAuthenticated) {
    next({ path: '/' })
  } else {
    next()
  }
})

store.isAuthenticatedtrue时,将{ name: 'login' }重定向到{ path: '/' }

注:

  • 我猜next({ path: '/' })会把用户带到你想让他们去的地方,如果不是这样,就相应地替换掉。
    • “更智能”* 路由解决方案在重定向到/login之前将最初请求的路由保存在存储器中,并且一旦用户已经认证,就使用保存的值在他们最初请求的路由上发送他们。

相关问题