我有一个带有帖子数据的API调用;让我们说这是登录过程.
使用Chrome的Postman扩展程序,我通过POST发送用户名和密码以登录用户.
但是我得到了这样的信息:
Illuminate \ Session \ TokenMismatchException
在我的基本控制器中,我有:
/** * 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调用时,我如何获得此令牌?我知道我可以在Laravel中创建一个令牌,但是当我通过API从外部打电话时我怎么能这样做呢?
通常,API用于跨站点请求.因此,您的CSRF保护毫无意义.
如果您不打算跨站点使用它,那么API可能不是您尝试做的最佳解决方案.无论如何,您可以创建一个返回令牌的API端点.
public function getToken(){ return Response::json(['token'=>csrf_token()]); }
如果要在某些方法上禁用CSRF保护,可以使用except或only.
$this->beforeFilter('csrf',array('on' => 'post','except'=>array('methodName','anotherMethod') ));
请参考official Laravel documentation.