Laravel по-русски

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

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

#1 02.04.2016 23:27:07

Laravel на хостинге

Написал сайт. Нужно было протестировать его работу и проверить работу с почтой.
На хостинг залил, дизаин прогрузился. Пытаюсь авторизоваться и вылетает ошибка:

TokenMismatchException in VerifyCsrfToken.php line 67:

Пытался прописать всякое разное:

{!! csrf_field() !!}
<input type="hidden" name="_token" value="<?php echo csrf_token() ?>">
<input type="hidden" name="_token" value="{{ csrf_token() }}">

Ничего не работает. Проблемы те же. Права на папки везде 777  временно для проверки.
Почему сайт не видит токен? Или у laravel защитная реакция против хостингов такая?

Не в сети

#2 02.04.2016 23:36:52

xelam
writerПисарь
Откуда: Москва
Сообщений: 50
Статей: 2

Re: Laravel на хостинге

мало данных.
какая версия фреймворка? И нужно видеть роуты.

Не в сети

#3 02.04.2016 23:45:43

Re: Laravel на хостинге

xelam пишет:

мало данных.
какая версия фреймворка? И нужно видеть роуты.

Зачем роуты? Не пойму.
На локалке работает все нормально под разными ОС. И все окей.
На хостинге такая вот лабуда.
Но тем не менее вот роуты.

<?php

/*
|--------------------------------------------------------------------------
| Routes File
|--------------------------------------------------------------------------
|
| Here is where you will register all of the routes in an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| This route group applies the "web" middleware group to every route
| it contains. The "web" middleware group is defined in your HTTP
| kernel and includes session state, CSRF protection, and more.
|
*/

/** Интернет магазин **/
Route::group(['middleware' => 'web'], function () {
    Route::auth(); // Авторизация на сайте

    Route::get('/', 'HomeController@index'); // Главна страница
    Route::get('/preview/{id}', 'HomeController@preview'); // Подробный просмотр товара
    Route::post('/star', 'HomeController@setStar'); // Звездный рейтинг

    Route::match(array('POST'), '/preview/{id?}', ['uses' => 'HomeController@add_comment']); // Добавление комментария
    Route::match(array('GET', 'POST'), '/account', ['middleware' => 'auth', 'uses' => 'UserController@index']); // Личный кабинет
    Route::match(array('GET', 'POST'), '/feedback', ['uses' => 'HomeController@Feedback']); // Обратная связь
});


/** Панель администрирования **/
Route::group(['middleware' => ['web', 'auth', 'acl']], function () {
    Route::get('/admin', ['uses' => 'AdminController@viewStats']); // Полный список товаров

    /* Управление товарами */
    Route::get('/admin/items', ['uses' => 'AdminController@viewItems']); // Полный список товаров
    Route::match(array('GET', 'POST'), '/admin/new_item', ['uses' => 'AdminController@setItems']); // Рагистрация нового товара
    Route::match(array('GET', 'POST'), '/admin/item/{id}', ['uses' => 'AdminController@viewItem']); // Подробный просмотр товара и модификация
    Route::get('/admin/delete_item/{id}', ['uses' => 'AdminController@deleteItem']); // Удаление товара по его идентификатору

    /* Управление категориями */
    Route::get('/admin/categories', ['uses' => 'AdminController@viewCategories']); // Список категорий
    Route::match(array('GET', 'POST'), '/admin/add_category', ['uses' => 'AdminController@setCategory']); // Регистрация новой категории
    Route::match(array('GET', 'POST'), '/admin/category/{id}', ['uses' => 'AdminController@viewCategory']); // Подробный просмотр категории и модификация

    /* Управление типом валют */
    Route::get('/admin/currencies', ['uses' => 'AdminController@viewCurrencies']); // Список валют
    Route::match(array('GET', 'POST'), '/admin/add_currency', ['uses' => 'AdminController@setCurrency']); // Регистрация новой валюты
    Route::match(array('GET', 'POST'), '/admin/currency/{id}', ['uses' => 'AdminController@viewCurrency']); // Подробный просмотр категории и модификация
    
    /* Управление комментариями */
    Route::get('/admin/commentaries', ['uses' => 'AdminController@viewCommentaries']); // Список комментариев
    Route::get('/admin/comment/{id}/{data_id}', 'AdminController@viewComment'); // Модерация комментария
    Route::match(array('POST'), '/admin/comment/{id?}/{data_id?}', ['uses' => 'AdminController@saveComment']); // Сохранение отмодерированного комментария
});

Версия laravel: Laravel Framework version 5.2.25

Не в сети

#4 03.04.2016 06:50:24

Re: Laravel на хостинге

Попробуйте убрать web middleware, начиная вроде как раз с версии 5.2.25 он автоматически подсоединяется ко всем routes. Видимо на локахосте у вас более старая версия, поэтому там все работает.

Не в сети

#5 03.04.2016 12:31:40

Re: Laravel на хостинге

AlexeyMezenin пишет:

Попробуйте убрать web middleware, начиная вроде как раз с версии 5.2.25 он автоматически подсоединяется ко всем routes. Видимо на локахосте у вас более старая версия, поэтому там все работает.

Убрал. Теперь ошибка:

Undefined variable: errors (View: /var/www/корень/data/www/мой_домен.ru/resources/views/auth/login.blade.php)

Я так понимаю вывод ошибок у меня теперь не работает, так как убрал middleware web. В связи с чем появилась новая ошибка.
Нет это не вариант решения проблемы. К тому же я ни где не видел информацию где в этой версии laravel что то меняли с middlewarwe web.

Нет, на локалке у меня именно та же версия.
Ошибка актуальная. И до сих пор я не пойму причину.

Не в сети

#6 03.04.2016 13:35:33

WebDev

Re: Laravel на хостинге

В login.blade условие на вывод ошибок допишите . if($errors)

#7 03.04.2016 14:20:48

Re: Laravel на хостинге

WebDev пишет:

В login.blade условие на вывод ошибок допишите . if($errors)

Теперь получаем такую ошибку:

Session store not set on request. (View: /var/www/корень/data/www/мой_домен.ru/resources/views/auth/login.blade.php)

Залезаю я значит в kernel.php и вижу следующее:

        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

А именно вот на эту строку:

\Illuminate\Session\Middleware\StartSession::class,

Обновил Laravel до версии: Laravel Framework version 5.2.29

Все осталось так же как и было.
Из следующей строки в kernel.php и имеющейся ошибке я понимаю что middleware web не могли встроить в роутер по умолчанию.:

\Illuminate\Session\Middleware\StartSession::class,

Следственно ошибка остается и можно вернуться к первоначальному роутеру.

Не в сети

#8 03.04.2016 21:13:50

Re: Laravel на хостинге

Еще вылетает такая ошибка при попытке отправить электронное письмо на почту:

getmypid() has been disabled for security reasons

Я не совсем понял вообще причину этой ошибки.
В общем это у меня хостинг косячный или так будет везде на всех хостингах?
P.S хостинг платный.

Не в сети

#9 04.04.2016 11:50:06

xelam
writerПисарь
Откуда: Москва
Сообщений: 50
Статей: 2

Re: Laravel на хостинге

web мидельварю можно и не убирать, а исключить роуты которым не нужна защита
Вот в документации https://laravel.com/docs/5.2/routing#csrf-protection чуть ниже раздел "Excluding URIs From CSRF Protection"

Не в сети

#10 04.04.2016 14:47:24

Re: Laravel на хостинге

xelam пишет:

web мидельварю можно и не убирать, а исключить роуты которым не нужна защита
Вот в документации https://laravel.com/docs/5.2/routing#csrf-protection чуть ниже раздел "Excluding URIs From CSRF Protection"

Я знаю зачем он нужен. И все как есть на данный момент так и должно быть. И исключение web middleware из проекта это не решение проблемы и ошибки

Не в сети

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