【问题标题】:Laravel post route errorLaravel发布路线错误
【发布时间】:2016-03-04 20:42:24
【问题描述】:

我搜索了很多线程,但都无法解决我的问题。

我使用 XAMPP(Lubuntu 15.10 上的 LAMPP)作为服务器。我创建了一个新项目:

composer create-project laravel/laravel angulara

我在app/HTTP/routes.php中添加了一条新路线:

Route::get('/', function () {
    return view('index');
});

Route::any('/test', function($check = 'OK'){
    return 'Check: '.$check;
});

我使用 curl 发送请求并获得响应。当我使用curl -X "GET" http://localhost/test 时,我得到了回复Check: OK。但是当我使用curl -X "POST" http://localhost/test 时,我得到了回应:

Whoops, looks like something went wrong.

1/1 TokenMismatchException in VerifyCsrfToken.php line 53:
in VerifyCsrfToken.php line 53
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 124
at Pipeline->Illuminate\Pipeline\{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 124
at Pipeline->Illuminate\Pipeline\{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 124
at Pipeline->Illuminate\Pipeline\{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 124
at Pipeline->Illuminate\Pipeline\{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 124
at Pipeline->Illuminate\Pipeline\{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 124
at Pipeline->Illuminate\Pipeline\{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 122
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 87
at Kernel->handle(object(Request)) in index.php line 54

我是 Laravel 的新手,所以我不知道在哪里查找错误,我正在使用 http://www.tutorials.kode-blog.com/laravel-5-angularjs-tutorial 学习,所以我需要来自 AngularJS 的 $HTTP 方法的发布请求。

我该如何解决这个问题?

【问题讨论】:

    标签: php laravel xampp http-post laravel-routing


    【解决方案1】:

    我的 Csrf 令牌问题。 你不能使用没有“_token”变量的post方法,否则你会修改路由代码。你可以得到token,但是这个方法:

    <?php echo csrf_token(); ?>
    

    或者你可以在你的表单中使用它:

    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
    

    干杯!

    【讨论】:

      【解决方案2】:

      查看 Laravel 文档CSRF Protection

      然后只需转到 Kernel.php 文件 (app/Http/Kernel.php) 并禁用 VerifyCsrfToken 中间件。

       **
       * The application's global HTTP middleware stack.
       *
       * @var array
       */
      protected $middleware = [
          ...
          //\App\Http\Middleware\VerifyCsrfToken::class,
      ];
      

      【讨论】:

      • 令牌提供跨站访问保护。禁用它的坏习惯。只需在表单中的某处使用 {{crsf_field() }}。
      • @TimvanUum 是的,但是当@Thomas Sablik 使用curl 发送请求时,我认为我们只有一种方法可以通过禁用VerifyCsrfToken 来解决这个问题
      猜你喜欢
      • 2019-05-21
      • 2015-05-27
      • 2018-10-23
      • 2018-02-13
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      相关资源
      最近更新 更多