如何同时使用 Laravel 认证和 vue-router

Jar*_*ate 4 routes laravel vue.js laravel-5 vue-router

我一般是 Laravel 和 PHP 的新手,但熟悉 Vue 和 SPA。例如,我知道如何使用 Bcrypt 创建身份验证。但是,我使用 Laravel 来运行php artisan make:auth并为后端创建几个不同的端点。

我试图使用 Vue 将我的应用程序转换为 SPA,但是使用 Vue 路由会导致 web.php 中定义的路由出现问题。例如,我有这样的 web.php,有几个不同的路由。

<?php

Route::get('/{vue_capture?}', function () {
    return view('app');
 })->where('vue_capture', '^(?!storage).*$'); 

Route::get('/', function () {
    return view('app');
});
Route::resource('Videos', 'VideoController')->middleware('auth','isAdmin');
Route::resource('Categories', 'CategoriesController')->middleware('auth');
Route::get('/search', 'VideoController@search')->middleware('auth');

Auth::routes();

Route::get('/settings/account', 'AccountsController@edit')->middleware('auth');
Route::get('/auth', 'AccountsController@get');
Route::put('/settings/account', 'AccountsController@update')->middleware('auth');
Run Code Online (Sandbox Code Playgroud)

但是,我还有一个 routes.js 来让 vue-router 使用以下内容处理路由:

import Home from './components/Home.vue'
import Videos from './components/Videos.vue'
import Categories from './components/Categories.vue'

export default{
    mode: 'history',


    routes: [
        {
            path:'/',
            component:Home
        },

        {
            path:'/Videos',
            component:Videos
        },
        {
            path:'/Categories',
            component:Categories
        },
        {
            path:'/login',
            component:login
        },
        {
            path:'/register',
            component:register
        },
        {
            path:'/logout',
            component:logout
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我知道如果您使用 SPA,Vue 应该接管路由,但是有没有办法同时使用两者?我找不到任何可以解决这个问题的东西,但我无法相信 Laravel 会让你选择使用他们的内置命令,php artisan make:auth或者如果你想要一个带有路由的 SPA 的话,就必须放弃所有这些并手动完成所有这些.

我尝试过使用 Laravel 和或 Vue 的不同 CRUD 教程。我已经尝试将所有路由定向到 Vue 以让 vue-router 处理路由。我尝试不将所有路由都提供给 vue-router 并保留我在 web.php 中的后端路由

其他半相关的问题是我的路线甚至没有显示为使用router-link. 它只是显示为普通文本。但现在我的首要任务是路由问题。

小智 5

您可以结合使用 vue 路由和 Laravel 路由。但是为了获得最佳效果,我建议您使用 vue router,因为您正在构建一个水疗中心。

  1. 消除
Route::get('/', function () {
    return view('app');
});
Run Code Online (Sandbox Code Playgroud)
  1. 将所有后端路由放在指向你的 vue 的路由之前。
Route::resource('Videos', 'VideoController')->middleware('auth','isAdmin');
Route::resource('Categories', 'CategoriesController')->middleware('auth');
Route::get('/search', 'VideoController@search')->middleware('auth');

Auth::routes();

Route::get('/settings/account', 'AccountsController@edit')->middleware('auth');
Route::get('/auth', 'AccountsController@get');
Route::put('/settings/account', 'AccountsController@update')->middleware('auth');

Route::get('/{vue_capture?}', function () {
    return view('app');
 })->where('vue_capture', '^(?!storage).*$'); 
Run Code Online (Sandbox Code Playgroud)

另外,请确认您的后端(运行php artisan route:list以查看您的 laravel 路由列表)和 vue 路由没有冲突的路由。我希望这有帮助。