Nav*_*p11 21 php rest laravel-5
我试图通过使用laravel创建Restful api并使用php artisan make:controller RestController创建我的控制器,这是我的控制器代码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RestController extends Controller
{
private $arr = array(
array("name"=>"jon", "family"=>"doe"),
array("name"=>"jhon", "family" => "doue")
);
public function index(){
return json_encode($this->arr);
}
public function store(Request $request){
return "oops!!";
}
public function update (Request $request, $id){
return "test";
}
}
Run Code Online (Sandbox Code Playgroud)
我添加这行代码来在routes/web.php文件中创建此路由
Route::resource('person', 'RestController');
Run Code Online (Sandbox Code Playgroud)
当我尝试在GET/person上测试这个api它工作正常但是在帖子上并且把我从laravel获得419状态代码.
iCo*_*ers 31
如果你正在开发rest apis,最好不要添加令牌.如果你使用的是5.4或5.5,你可以使用api.php而不是web.php.在api.php你不需要对帖子请求进行令牌验证.
如果您使用的是web.php,那么您就会激活令牌.这是官方文档
从CSRF保护中排除URI
有时您可能希望从CSRF保护中排除一组URI.例如,如果您使用Stripe处理付款并使用其webhook系统,则需要从CSRF保护中排除Stripe webhook处理程序路由,因为Stripe将不知道要向您的路由发送什么CSRF令牌.
通常,您应将这些类型的路由放在RouteServiceProvider应用于routes/web.php文件中所有路由的Web中间件组之外.但是,您也可以通过将其URI添加到VerifyCsrfToken中间件的$ except属性来排除路由:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'stripe/*',
];
}
Run Code Online (Sandbox Code Playgroud)
以供参考
https://laravel.com/docs/5.5/csrf
Pun*_*rma 15
根据我的知识,有两种方法可以解决这个问题
方法-1: - 添加CsrF令牌
方法-2: - 从CSRF保护中排除URI
如何使用
方法1: - 在POST请求中再添加一个变量.
"_token": "{{ csrf_token() }}"
Run Code Online (Sandbox Code Playgroud)
Ajax的示例
req = $.ajax({
type: "POST",
url: "/search",
data: {'key' : 'value',
"_token": "{{ csrf_token() }}",},
dataType: "text",
success: function(msg){
}
});
Run Code Online (Sandbox Code Playgroud)
使用表单的示例
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)
方法-2在以下位置有一个名为"VerifyCsrfToken"的文件
yourProjectDirectory --> app->Http--> Middleware
Run Code Online (Sandbox Code Playgroud)
使用以下方法添加您的网址
protected $except = [
'url1/',
'url2/',
];
Run Code Online (Sandbox Code Playgroud)
何时使用
如果您是API的所有者(完全控制),请使用方法1,因为CSRF TOKEN会为您的应用程序增加安全性.
如果您无法添加CSRF令牌,如果您使用的是任何第三方API,则webhooks等会转到Method-2.
归档时间: |
|
查看次数: |
38144 次 |
最近记录: |