Laravel 5 GET 正在工作,但 POST 方法不起作用

Posted

技术标签:

【中文标题】Laravel 5 GET 正在工作,但 POST 方法不起作用【英文标题】:Laravel 5 GET is working but POST method is not working 【发布时间】:2016-09-04 09:49:13 【问题描述】:

我是 Laravel 的新手,遇到了一个奇怪的问题。在路由中,我通过 POST 和 GET 方法调用函数。

GET 返回数据,但 POST 不返回。这是我的简单代码:

发帖

Route::post('register', function() 
    echo 'we are here';
);

对于 GET:

Route::get('register', function() 
    echo 'we are here';
);

请帮忙。谢谢。

【问题讨论】:

您遇到什么错误?你是如何提出发帖请求的? 那么 post 方法给出了什么。任何错误消息。 朋友们,我正在使用一个firefox插件“HTTP Requester”,我在这里给出参数,然后POST数据 这里是 POST prntscr.com/b22e3m 的截图这里是 GET prntscr.com/b22ehp 的截图 【参考方案1】:

如果你在没有ajax的情况下在网络上工作,你可以查看并使用上面的答案或使用

<form action="">
   @csrf
   ...
</form>

如果你需要通过ajax请求调用这个URL 第一步:在你的元标记()中添加 CSRF 令牌,你可以在你的 main.blade.php 文件中指定(布局)

<meta name="csrf-token" content=" csrf_token() ">

第 2 步:在 ajax 请求中添加 X-CSRF-TOKEN 标头

    var APP_URL = !! json_encode(url('/')) !!
    $.ajax(
            type:'post',
            data:(search:input),
            headers: 
              'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            ,
            url: ''+APP_URL+'/register',
            success:function(data)
            
                alert("success");
            ,
            error:function(data)
            
               alert('error');
            ,
        );

谢谢!

【讨论】:

【参考方案2】:

Laravel 自动为应用程序管理的每个活动用户会话生成一个 CSRF“令牌”。此令牌用于验证经过身份验证的用户是实际向应用程序发出请求的用户。

每当您在应用程序中定义 html 表单时,您应该在表单中包含一个隐藏的 CSRF 令牌字段,以便 CSRF 保护中间件能够验证请求。要生成隐藏的 CSRF 令牌字段,您可以使用 csrf_field 辅助函数:

// 原版 PHP:

<?php echo csrf_field(); ?>

//刀片模板语法:

 csrf_field() 

csrf_field 辅助函数生成以下 HTML:

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

您无需在 POST、PUT 或 DELETE 请求中手动验证 CSRF 令牌。包含在 web 中间件组中的 VerifyCsrfToken 中间件会自动验证请求输入中的令牌与会话中存储的令牌是否匹配。

【讨论】:

【参考方案3】:

将此添加到您的表单中:

<input type="hidden" name="_token" value=" csrf_token() ">

您的表单将如下所示

<form method="POST">
   <input type="hidden" name="_token" value=" csrf_token() ">

   ...
</form>

【讨论】:

【参考方案4】:

您需要在每个请求中包含一个 CSRF 令牌(GET 除外)。

https://laravel.com/docs/5.2/routing#csrf-protection

【讨论】:

听起来不错。那么我如何将它添加到路线中? _token 与 CSRF 令牌添加到输入请求中。 你的意思是这样吗? Route::post('register', 'RegisterController@index', '_token'); 没有。添加_token,就像您在请求中添加firstnamelastname一样。 好的,这是我的网址testsite.com/dev/api/v2/register?_token=6486我写对了吗?

以上是关于Laravel 5 GET 正在工作,但 POST 方法不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.0 的 Route::post 渲染一个空页面,为啥当 Route::get 工作正常时会这样

此路由不支持 GET 方法。支持的方法:POST。 laravel 5.8 阿贾克斯

ajax 类型的帖子在 laravel 5.4 中不起作用

角度 POST 请求不起作用但 GET 工作正常

在 Laravel 中为 GET 和 POST 使用不同的控制器,但使用相同的名称

Laravel 输入:get() 不工作