Vue 路由器和 Laravel 中间件

Posted

技术标签:

【中文标题】Vue 路由器和 Laravel 中间件【英文标题】:Vue Router and Laravel Middlewares 【发布时间】:2019-03-02 13:42:26 【问题描述】:

我的申请有不同的路线:

GET /game/any

此路由受 Laravel auth 中间件保护。 在这个 Laravel 路由中,我想构建 SPA 并提供 Vue 路由器:

const routes = [
   path: '/game/start', component: GameStart ,
   path: '/game/stats', component: GameStats 
]

我有不受任何 Laravel 中间件保护的“主”路由

GET /any

整个 Vue 路由器如下所示:

const routes = [
      // Not protected URLs
       path: '/', component: Main ,
       path: '/news', component: News ,

      // Protected URLs
       path: '/game/start', component: GameStart ,
       path: '/game/stats', component: GameStats 
    ]

所以我的问题是: 像这样混合后端和前端是个好主意吗? 因为我假设“/game/*”路由器在前端部分不受保护。

或者我应该在前端使用 Laravel Passport 和令牌身份验证?

【问题讨论】:

【参考方案1】:

您应该使用 vue-router 元和回调(beforeEach)在前端使用 Laravel Passport 和令牌身份验证。

routes.js

...

export const routes = [
   path: '/game/start', component: GameStart, meta:  requiresAuth: true  ,
   path: '/game/stats', component: GameStats, meta:  requiresAuth: true  ,
   path: '/signin', component: SigninPage ,
   path: '*', redirec: '/' 
];

router.js

import VueRouter from 'vue-router';
import  routes  from './routes';
import store from './store'

export const router = new VueRouter(
  routes,
  mode: 'history'
);

router.beforeEach((to, from, next) => 
  // you could define your own authentication logic with token
  let isAuthenticated = store.getters.isAuthenticated

  // check route meta if it requires auth or not
  if(to.matched.some(record => record.meta.requiresAuth)) 
    if (!isAuthenticated) 
      next(
          path: '/signin',
          params:  nextUrl: to.fullPath 
      )
     else 
      next()
    
   else 
    next()
  
)

export default router

【讨论】:

以上是关于Vue 路由器和 Laravel 中间件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel AJAX 请求进入路由 api Vue 错误

带有角度路由的 Laravel 5 中间件

Laravel 5:路由之前和之后的中间件

Laravel 路由组和中间件

将 Auth 中间件应用于所有 Laravel 路由

Laravel 多重身份验证 |路由中间件