Всего несколько минут назад мне нужно было выйти из моего приложения Laravel + React (это обычно), но с помощью Axios. Я попытался сделать это сразу же, отправив запрос POST через Axios для выхода из системы, но он не перенаправляет себя (будучи XHR) и не промис then (потому что Laravel отправляет статус 302, а не любой из кодов 2XX).

Поэтому я придумал решение ниже, которое просто проверяет, является ли запрос XHR (т.е. имеет ли Accept: application/json или аналогичный) заголовок, он отвечает 204 код состояния.

Для этого все, что вам нужно сделать, это переопределить метод loggedOut из типажа AuthenticatesUsers в вашем классе LoginController следующим образом:

<?php

namespace App\Http\Controllers\Auth;

use ...

class LoginController extends Controller
{
    ...

    /**
     * The user has logged out of the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return mixed
     */
    protected function loggedOut(Request $request)
    {
        if ($request->wantsJson()) {
            return response()->json([], 204);
        }
    }
}

Затем просто отправьте запрос POST для выхода из системы и перенаправления пользователя в обратном вызове Promise следующим образом:

import React from 'react';
import ReactDOM from 'react-dom';

const handleLogout = () => {
    axios.post('/logout')
        .then(() => location.href = '/home')
};

function Example() {
    return (
        <div className="container">
            <div className="row justify-content-center">
                <div className="col-md-8">
                    <div className="card">
                        <div className="card-header">Example Component</div>
                        <div className="card-body">
                            <p className="card-text">I'm an example component!</p>
                            <button className="btn btn-light" onClick={handleLogout}>Logout</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    );
}

export default Example;

if (document.getElementById('example')) {
    ReactDOM.render(<Example />, document.getElementById('example'));
}

Или, если вы используете Vue.js:

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Example Component</div>
                    <div class="card-body">
                        <p class="card-text">I'm an example component.</p>
                        <a class="btn btn-light" @click="logout">Logout</a>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        methods: {
            logout() {
                axios.post('/logout')
                    .then(() => location.href = '/home')
            }
        },
        mounted() {
            console.log('Component mounted.')
        }
    }
</script>

Вот и все! Теперь у вас есть выход из системы и перенаправления (как вы хотите). Если вам нужно, для справки также есть суть с приведенным выше кодом на https://gist.github.com/vaibhavpandeyvpz/c5a57cb34f34bbdd728a4a746d318d94.