简体   繁体   中英

Laravel routes not working when using Vue Router

I am trying to call a laravel route Route::get('/logout', 'Auth\\LoginController@logout'); that will logout the user and redirect to the login page, but when I try to redirect to this url it won't work, anything happens, just like it was calling a vue router route, but this route does not exists in my router.js .

This is my route configuration to vue routes:

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

and this is my router.js :

//import ...

Vue.use(Router)

export default new Router({
    mode: 'history',
    routes: [{
        path: '/',
        component: Inicio
    }, {
        path: '/viagens/cadastrar',
        component: Cadastrar
    }, {
        path: '/viagens/listar',
        component: Listar
    }]
})

There's not a /logout route in my route.js , so why it is not calling my laravel route??

How are you generating your links inside your vue component: with router-link or href ?

  • If you want to call a vue route, use router-link ;
  • If you want to call a "normal" or laravel route, use href ;

Let me know if it worked.

尝试将您的 vue 路线放在此行之前:-

Auth::routes();

First, add Laravel auth routes to web.php file in routes folder

Auth::routes();

then in the frontend send a request to logout route

  axios.post('/logout').then(response => {
                location.reload();
            }).catch((error) => {
               console.log(error);
            });

What I did in myproject.There is Auth::routes() in web.php. It will handle it by calling ougout in AthenticatesUser.php.Please have a look at this php class.

<template>
<div class="container">
    <button class="btn" @click="logout">logout</button>
    <form id="logout-form" action="/logout" method="POST" style="display: 
none;">
                        <input type="hidden" name="_token" :value="token">
                    </form>
    <router-view></router-view>
</div>
</template>
 <script>
  export default {
  computed: {
        token() {
            let token = document.head.querySelector('meta[name="csrf-token"]');
            return token.content
        }
    },
    methods: {
        logout() {
            document.getElementById('logout-form').submit()
        }
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM