【问题标题】:Laravel POST route from an js call is returning 500来自 js 调用的 Laravel POST 路由返回 500
【发布时间】:2016-08-28 03:57:10
【问题描述】:

我最近更新了 Laravel 作曲家更新,从 5.2.23 -> 5.2.31 看起来改变了一些东西,这意味着我不理解错误。就像返回类型或语法发生了变化。

我的发帖路线现在好像不行了

这似乎是一个有效的 POST 路由吗?

Route::group(['as' => 'api::', 'namespace' => 'Api', 'prefix' => 'api'], function () {
        Route::post('/report', ['as' => 'reports.create', 'uses' => 'AuditReportController@create']);
});

它在我更新之前有效,现在在 RouteCollection.php 第 206 行中表示 at RouteCollection->methodNotAllowed(array('POST'))

可能是 javascript 向其发布了一个 id,但该查询看起来不错,并且更新时更改了 laravel。 控制台日志:http://randomwebsite.co.uk/api/report500(内部服务器错误)

在 RouteCollection.php 中使用一些 var_dump() 跟踪它会到达 getRouteForMethods(),所以“$request->method() == 'OPTIONS'” 是什么抛出它,但我不知道这是在哪里设置或如果主要问题。

protected function getRouteForMethods($request, array $methods)                                       
{                                                                                                     
    if ($request->method() == 'OPTIONS') {                                                            
        return (new Route('OPTIONS', $request->path(), function () use ($methods) {                   
            return new Response('', 200, ['Allow' => implode(',', $methods)]);                        

        }))->bind($request);                                                                          
    }                                                                                                 

    $this->methodNotAllowed($methods);                                                                
}

500 错误的完整跟踪。

MethodNotAllowedHttpException in vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php line 219:

in RouteCollection.php line 219
at RouteCollection->methodNotAllowed(array('POST')) in RouteCollection.php line 206
at RouteCollection->getRouteForMethods(object(Request), array('POST')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 823
at Router->findRoute(object(Request)) in Router.php line 691
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 54

编辑: 好的,找到了一种从控制台获取错误超过 500 的方法。“VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:” JS 正在传递 X-CSRF-Token:1218vsMzumAUJ1qZZF1laralarlar..etc 所以可能会有变化

return hash_equals((string) $request->session()->token(), (string) $token);

return hash_equals($sessionToken, $token);

我的 JS 看起来不错,就像文档一样

$.ajaxSetup({
     headers: {
        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
      }
});

【问题讨论】:

  • 好的,找到了从控制台获取错误超过 500 的方法。“VerifyCsrfToken.php 第 67 行中的 TokenMismatchException:”JS 正在传递 X-CSRF-Token:1218vsMzumAUJ1qZZF1laralarlar..etc 所以也许那里的变化 return hash_equals((string) $request->session()->token(), (string) $token);返回 hash_equals($sessionToken, $token);

标签: php ajax laravel


【解决方案1】:

好的,看来是更新后的案例问题:

在 laravel 类中,这似乎强制进行了更好的字符串匹配:

OLD
return hash_equals((string) $request->session()->token(), (string) $token);
NEW
return hash_equals($sessionToken, $token);

所以:'X-CSRF-Token' 应该是 'X-CSRF-TOKEN' 一个案例问题。

这导致我解决了第二个问题,您不能将空数组传递给 eloquent 进行保存,需要将其保留为 json_encode([])

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 2018-08-05
    • 2016-12-15
    • 2015-05-27
    • 2022-07-04
    • 1970-01-01
    • 2020-09-11
    • 2016-03-18
    • 2016-06-15
    相关资源
    最近更新 更多