MethodNotAllowedException Создание пост-запроса к web.php в Laravel - PullRequest
0 голосов
/ 16 декабря 2018

Итак, я перешел на использование компонентов vue внутри моего проекта laravel.Я пытаюсь отправить запрос на запись в мой контроллер входа в систему через файл web.php, однако, когда я пытаюсь это сделать, я получаю сообщение об ошибке sayin MethodNotAllowedException, и я думаю, что это может быть связано с защитой csrf, но даже при добавленииЗаголовки к моему почтовому запросу не решили мою проблему.

Итак, вот компонент vue login, выполняющий почтовый запрос

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-6">
                <div class="card card-default">
                    <div class="card-header">
                        Login
                    </div>

                    <div class="card-body">
                    <form @submit.prevent="login">
                        <input type="text" v-model="username" class="form-control mb-3" placeholder="Email">
                        <input type="password" v-model="password" class="form-control mb-3" placeholder="Password">
                        <div>
                            <button type="submit" class="btn btn-primary btn-block">Login</button>
                        </div>
                    </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        name: 'login',
        data() {
            return {
                username: '',
                password: ''
            }
        },
        methods: {
            login() {
                this.$store.dispatch('login', {                    
                    username: this.username,
                    password: this.password
                })
            }
        }
    }
</script>

- это действие магазина, которое я отправляю с заголовками, настроенными глобально,Я не уверен, что мне все еще нужно передать его в объект axios?

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)
axios.defaults.baseURL = 'http://multitenant-diy.test/web'
let token = document.head.querySelector('meta[name="csrf-token"]');
axios.defaults.headers.post['header1'] = {
    'X-Requested-With': 'XMLHttpRequest',
    'X-CSRF-TOKEN': token.content
}

export default new Vuex.Store({
  actions: {
    login(context, credentials) {
        axios.post('/login', {
            username: credentials.username,
            password: credentials.password
        })
        .then(response => {
            console.log(response.data);
            context.commit('loggedIn', response.data)
        })
        .catch(error => {
            console.log(error.response.data)
        })
    }
  }
})

, и вот маршрут входа в систему web.php, который я называю

Route::domain('multitenant-diy.test')->group(function () { 
    Route::get('/{any}', 'AppController@index')->where('any', '.*');
    Route::post('/login', 'AdminController@login');
});

Любое пониманиена то, что я пропускаю, будет принята с благодарностью !!

1 Ответ

0 голосов
/ 16 декабря 2018

Убедитесь, что эта строка в вашей голове

<meta name="csrf-token" content="{{ csrf_token() }}">
...