Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 10.10.2016 00:04:38

Laravel 5.3 TokenMismatchException

никак не могу решить проблему отправки писем в Laravel 5.3
та же проблема была в 5.1, решения не нашел - поставил 5.3
первое время все работало, но потом я опять не заметил после чего стала появляться эта ошибка токена
вроде ничего, касающегося формы не трогал

routes\web.php

Route::get('/admin', 		['as' => 'admin.index', 			'uses' => 'AdminController@index']);
Route::group(['middleware' => ['web']], function () {
	Route::get('/',  				['as' => 'home', 			'uses' => 'HomeController@index']);
	Route::post('/', 				['as' => 'callback', 		'uses' => 'PostController@callback']);
});

PostController.php

    public function callback(Request $request) 
    {

        $this->validate($request, [
            'name' => 'required|min:3',
            'tel' => 'required|min:10'
        ]);

        if ($request->ajax()) return;
        return 'publish';
    }

resources\assets\js\app.js

Vue.component('callback', require('./components/callback.vue'));

const app = new Vue({
    el: 'body',

    data: {
        mymessage: "hello world!",
        formInputs: {},
        formErrors: {}
    },

    methods: {
		submitForm: function(e) {
		  var form = e.target;
		  var action = form.action;
		  var csrfToken = form.querySelector('input[name="_token"]').value;

		  this.$http.post(action, this.formInputs, {
		    headers: {
		        'X-CSRF-TOKEN': csrfToken
		    }
		  })
		  .then(function() {
		        form.submit();
		  })
		  .catch(function (data, status, request) {
		    var errors = data.data;
		    this.formErrors = errors;
		  });
		}

    },

});

resources\assets\js\components\callback.vue

<template>

    <div class="callback">
        <a href="/" class="root"> </a>
        <p>8 (495) 790 84 15<br>
        <a href="mailto:sales@steklo-group.ru">sales@steklo-group.ru</a><br>
        <a class="btn btn-primary btn-large" href="#callback" title="Обратный звонок" data-toggle="modal" data-target="#callback">
        <i class="fa fa-phone"> </i> Обратный звонок</a></p>
    </div>

</template>


<script>
    export default {
        ready() {
            console.log('Callback ready.')
        }
    }
</script>

resources\views\layouts\public.blade.php

<!DOCTYPE html>
<html lang="en">
    <head>

        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="csrf-token" content="{{ csrf_token() }}">

        <link rel="stylesheet" href="{{ elixir("css/app.css") }}">
        <script>
            window.Laravel = <?php echo json_encode([
                'csrfToken' => csrf_token(),
            ]); ?>
        </script>
</head>

    <body>
        <div class="flex-center position-ref full-height panel panel-default">

            <header class="layout-header panel-heading">
                @include('modules.topmenu')
                <callback></callback>
                @include('modules.mainmenu')
            </header>
            {!! Breadcrumbs::renderIfExists() !!}
            @if(Session::has('message'))
                <div class="alert alert-info">{{Session::get('message')}}</div>
            @endif
            @if(Session::has('errors'))
                <div class="alert alert-info">@foreach($errors->all() as $error){{ $error }}<br>@endforeach
            </div>
            @endif
            <content id="content" class="panel-body content" style="clear:both;">@yield('content')</content>
            <div class="clearfix"></div>
            <footer id="bottommodules" class="panel-footer">@yield('bottommodules')</footer>
        </div>
        @include('modules.totop')
        @include('modules.callback')
        <script src="{{ elixir("js/app.js") }}"></script>
    </body>
</html>

resources\views\modules\callback.blade.php

<div class="modal fade" id="callback" tabindex="-1" role="dialog" aria-labelledby="callback" aria-hidden="true">
  <div class="modal-dialog">

    <form @submit.prevent="submitForm" name="callback" method="POST" action="/" role="form" class="form-horizontal" enctype="multipart/form-data">
    {{ csrf_field() }}

    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="CallbackModalLabel"><i class="fa fa-envelope-o text-primary"></i>  Отправить письмо / Попросить перезвонить</h4>
      </div>
      <div class="modal-body">

    	 <div class="text-primary">* обязательное поле</div>

          <div class="form-group">
            <label class="control-label" for="name">Ваше имя *</label>
            <input id="name" name="name" class="form-control" v-model="formInputs.name" type="text" required>
            <span v-if="formErrors['name']" class="error">@{{ formErrors['name'] }}</span>
          </div>

          <div class="form-group">
            <label class="control-label" for="phone">Номер телефона *</label>
            <input id="phone" name="tel" class="form-control" v-model="formInputs.tel"  required>
            <span v-if="formErrors['tel']" class="error">@{{ formErrors['name'] }}</span>
          </div>

          <div class="form-group">
            <label class="control-label" for="time">Желательное время звонка</label>
            <input id="time" name="time" class="form-control" v-model="formInputs.time" type="text">
          </div>

          <div class="form-group">
            <label class="control-label" for="email">Адрес e-mail</label>
            <input id="email" name="email" class="form-control" v-model="formInputs.email" type="email">
          </div>



          <div class="form-group">
            <label class="control-label" for="message">Сообщение</label>
            <textarea id="msg" name="msg" class="form-control" v-model="formInputs.msg"></textarea>
          </div>

      </div>

  	  <div class="modal-footer">
        <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Закрыть</button>
        <button type="submit" class="btn btn-primary pull-right">Отправить</button>
      </div>

     </div>
    </form>


  </div>
</div>
TokenMismatchException in VerifyCsrfToken.php line 68:

    in VerifyCsrfToken.php line 68
    at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
    at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
    at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
    at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
    at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
    at Pipeline->then(object(Closure)) in Router.php line 644
    at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 618
    at Router->dispatchToRoute(object(Request)) in Router.php line 596
    at Router->dispatch(object(Request)) in Kernel.php line 267
    at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 51
    at Debugbar->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46
    at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104
    at Pipeline->then(object(Closure)) in Kernel.php line 149
    at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116
    at Kernel->handle(object(Request)) in index.php line 54

Не в сети

#2 10.10.2016 09:36:49

Re: Laravel 5.3 TokenMismatchException

Может это и не устранит ошибку, но предотвратит другие: нужно убрать из маршрутов ['middleware' => ['web'], т.к. ко всем маршрутам, находящимся в web.php автоматически присваивается этот посредник и если делать это вручную, сессии и пр. будут работать некорректно.

Не в сети

#3 10.10.2016 14:23:00

Re: Laravel 5.3 TokenMismatchException

Это точно не поможет, т.к.  это я добавил уже после того как перестало работать, потому что нашёл это в каком-то буржуйском блоге

Не в сети

#4 10.10.2016 14:52:47

Re: Laravel 5.3 TokenMismatchException

- используйте встроенные очереди, отрабатывайте очередь  через встроенный scheduler.
действий по сути там 4-6 штук, а работает как часы и везде.

Не в сети

#5 10.10.2016 14:53:49

Re: Laravel 5.3 TokenMismatchException

и вообще переходите на очереди в плане рассылки писем. сэкономите себе на перепилке проекта при проседании производительности (когда уже железа будет нехватать)

Не в сети

#6 10.10.2016 16:23:31

Re: Laravel 5.3 TokenMismatchException

Что за очереди?

Не в сети

#7 10.10.2016 19:48:23

Re: Laravel 5.3 TokenMismatchException

schel4ok пишет:

Что за очереди?

https://laravel.com/docs/5.3/queues
затем смотри
https://laravel.com/docs/5.3/scheduling

Не в сети

#8 11.10.2016 08:15:14

Re: Laravel 5.3 TokenMismatchException

А что онтокен при этом не будет проверять?

Не в сети

Подвал раздела