我是Laravel的新手,我面临着一个奇怪的问题。在路由中,我通过POST和GET方法调用函数。
GET返回数据但POST没有。这是我的简单代码:
对于POST
Route::post('register', function() {
echo 'we are here';
});
GET:
Route::get('register', function() {
echo 'we are here';
});
请帮忙。谢谢。
答案 0 :(得分:9)
您需要在每个请求中包含CSRF令牌(GET除外)。
答案 1 :(得分:2)
将此添加到您的表单:
<input type="hidden" name="_token" value="{{ csrf_token() }}">
您的表单将如下所示
<form method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
...
</form>
答案 2 :(得分:0)
Laravel为应用程序管理的每个活动用户会话自动生成CSRF“令牌”。该令牌用于验证经过身份验证的用户是实际向应用程序发出请求的用户。
每次在应用程序中定义HTML表单时,都应在表单中包含一个隐藏的CSRF令牌字段,以便CSRF保护中间件能够验证该请求。要生成包含CSRF令牌的隐藏输入字段_token,可以使用csrf_field帮助函数:
//香草PHP
//刀片模板语法 {{csrf_field()}} csrf_field帮助器函数将生成以下HTML:
“> 您无需在POST,PUT或DELETE请求上手动验证CSRF令牌。 Web中间件组中包含的VerifyCsrfToken中间件将自动验证请求输入中的令牌是否与会话中存储的令牌匹配。
答案 3 :(得分:0)
如果您不使用ajax在网络上工作,则可以签出并使用上述答案或使用
<form action="">
@csrf
...
</form>
如果您需要通过ajax请求调用此URL 第1步:在您的meta标签()中添加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');
},
});
谢谢!