Это нечто очень странное:
Я реализую в Laravel 5 очередь сообщений Iron, чтобы отличать запрос от выполнения длинных задач.
После того, как я поместил сообщение в очередь Iron, он отправляет запрос POST на заранее определенный маршрут, чтобы пробудить длительный процесс (подход Push Queue).
У меня есть этот файл маршрута:
Route::post('queue/receive', function()
{
//start long task exec
return Queue::marshal();
});
/* garantisco il logout agli utenti*/
Route::get('auth/logout', 'Auth\AuthController@getLogout');
/* redirect degli utenti loggati */
Route::group(['middleware' => 'guest'], function()
{
Route::get('/', 'WelcomeController@index');
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
});
Route::group(['middleware' => 'auth'], function()
{
Route::get('home', 'HomeController@index');
});
Первый определенный маршрут — это конечная точка, которую вызовет IronMQ.
Я знаю, что несоответствие токенов является популярной проблемой при использовании промежуточного программного обеспечения «VerifyCsrfToken» (аналогично фильтру в L4).
Невероятно то, что я отключил это промежуточное ПО, но проблема сохраняется.
Это промежуточное ПО моего ядра:
class Kernel extends HttpKernel {
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
//'LabelCreator\Http\Middleware\VerifyCsrfToken',
];
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => 'LabelCreator\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'guest' => 'LabelCreator\Http\Middleware\RedirectIfAuthenticated',
];
}
Как вы можете видеть, «VerifyCsrfToken» отключен, но при тестировании почтового запроса от локального env, теперь я получаю эту ошибку:
DecryptException in Encrypter.php line 142:
Invalid data.
in Encrypter.php line 142
at Encrypter->getJsonPayload('') in Encrypter.php line 92
at Encrypter->decrypt('') in IronQueue.php line 214
at IronQueue->parseJobBody('') in IronQueue.php line 173
at IronQueue->marshalPushedJob() in IronQueue.php line 159
at IronQueue->marshal()
at call_user_func_array(array(object(IronQueue), 'marshal'), array()) in QueueManager.php line 223
at QueueManager->__call('marshal', array()) in Facade.php line 207
at QueueManager->marshal() in Facade.php line 207
at Facade::__callStatic('marshal', array()) in routes.php line 17
at Queue::marshal() in routes.php line 17
at RouteServiceProvider->{closure}()
at call_user_func_array(object(Closure), array()) in Route.php line 153
at Route->runCallable(object(Request)) in Route.php line 128
at Route->run(object(Request)) in Router.php line 691
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Router.php line 693
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 660
at Router->dispatchToRoute(object(Request)) in Router.php line 618
at Router->dispatch(object(Request)) in Kernel.php line 210
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 141
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 111
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
Я пытался прокомментировать другие промежуточные программы, но проблема сохраняется.
Iron выполняет простой POST-запрос к моей конечной точке, как это делают webhooks.
В чем проблема?
Я не думаю, что это проблема сеанса, потому что Iron — это простая служба третьей стороны, которая вызывает конечную точку, и если она остается «гостевым» клиентом для моего приложения, это нормально.
Может кто-нибудь мне помочь?
заранее спасибо
Я нашел проблему:
Я тестировал конечную точку в локальной сети без полезной нагрузки POST-запроса, поэтому расшифровка не работает должным образом, а обнаруживает, какую полезную нагрузку отправляет IronMQ, используя RequestBin (очень полезный инструмент), я добавил ту же полезную нагрузку в локальный тестовый запрос, и теперь он работает.
Надеюсь, поможет 🙂
Других решений пока нет …