我有一个带有发布数据的 API 调用;假设这是登录过程。
使用 Chrome 的 Postman 扩展,我通过 POST 发送用户名和密码以登录用户。 但我收到了这条消息:
Illuminate \ Session \ TokenMismatchException
在我的基本 Controller 中我有:
/**
* Initializer.
*
* @return void
*/
public function __construct() {
// CSRF Protection
$this->beforeFilter('csrf', array('on' => 'post'));
// Layouts/Notifications
$this->messageBag = new Illuminate\Support\MessageBag;
}
当我使用 beforeFilter 删除行时,一切正常。 但这不是解决办法。 任何 POST 调用都会收到此错误消息。 我知道我需要这个 _token。但是,当我从 API 调用时如何获得此 token ?我知道我可以在 Laravel 中创建一个 token ,但是当我通过 API 从外部调用时我该如何做呢?
最佳答案
通常,API 用于跨站点请求。所以你的 CSRF 保护是毫无意义的。
如果您不打算跨站点使用它,那么 API 很可能不是您要执行的操作的最佳解决方案。无论如何,您可以创建一个返回 token 的 API 端点。
public function getToken(){
return Response::json(['token'=>csrf_token()]);
}
如果您想在某些方法上禁用 CSRF 保护,您可以使用except
或only
。
$this->beforeFilter('csrf', array('on' => 'post',
'except'=>array('methodName', 'anotherMethod')
));
关于php - Laravel API token 不匹配异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27944512/