Laravel Sanctum/Vuex 未捕获错误 Vue Router Navigation Guard

Posted

技术标签:

【中文标题】Laravel Sanctum/Vuex 未捕获错误 Vue Router Navigation Guard【英文标题】:Laravel Sanctum/Vuex Uncaught Error Vue Router Navigation Guard 【发布时间】:2021-04-21 10:48:17 【问题描述】:

任何人都可以就这个问题提出建议吗?

我有一个带有 Vue 前端的 Laravel 应用程序,它使用 Laravel Sanctum 连接到 API。 (在同一个应用程序中)我正在尝试设置身份验证保护,因此只有在使用 API 进行身份验证后才能访问路由。

我正在像这样通过状态操作进行连接:

      async getAuthenticatedUser( commit , params) 
          await axios.get('api/auth-user',  params )
              .then(response => 
                  commit('SET_AUTHENTICATED', true)
                  commit('SET_AUTHENTICATED_USER', response.data)
                  localStorage.setItem('is-authenticated', 'true')

                  return Promise.resolve(response.data)
              )
              .catch(error => 
                  commit('SET_AUTHENTICATED', false)
                  commit('SET_AUTHENTICATED_USER', [])
                  localStorage.removeItem('is-authenticated')

                  return Promise.reject(error.response.data)
              )
      ,

状态认证属性设置如下:

const state = () => (
      authenticated: localStorage.getItem('is-authenticated') || false,
      authUser: [],
  )

我有以下警卫检查身份验证。如果我没有正确登录,当我访问具有 requiresAuth 属性的路由时,应用程序会将我重定向回登录屏幕。

但是当我尝试登录时,我收到Redirected when going from "/login" to "/dashboard" via a navigation guard.

router.beforeEach((to, from, next) => 
  if (to.matched.some((record) => record.meta.requiresAuth)) 
    if (store.getters["Auth/isAuthenticated"]) 
      next()
      return
    
    next('/login')
  

  if (to.matched.some((record) => record.meta.requiresVisitor)) 
    if (! store.getters["Auth/isAuthenticated"]) 
      next()
      return
    
    next('/dashboard')
  

  next()
)

【问题讨论】:

【参考方案1】:

如果可以安全忽略,并且您使用的是 vue-router ^3.4.0,您可以这样做:

import VueRouter from 'vue-router'

const  isNavigationFailure, NavigationFailureType  = VueRouter
...
this.$router.push(fullPath).catch(error => 
  if (!isNavigationFailure(error, NavigationFailureType.redirected)) 
    throw Error(error)
  
)

【讨论】:

以上是关于Laravel Sanctum/Vuex 未捕获错误 Vue Router Navigation Guard的主要内容,如果未能解决你的问题,请参考以下文章

laravel echo:“未捕获的 ReferenceError:未定义回声”

VueJS 3 + Laravel:未捕获的类型错误:无法读取未定义的属性“组件”

致命错误 Laravel:查看我的网站时未捕获 ReflectionException

Guzzle Curl 错误未通过 try catch 语句捕获(Laravel)

Laravel 错误:未捕获的 ReflectionException:类 App\Http\Kernel 不存在

未捕获的错误:将 laravel 5.8 升级到 8 后调用未定义的函数 Illuminate\Mail\TransportManager()