Laravel API TokenMismatchException


Laravel API TokenMismatchException

我有一个带有发布数据的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删除该行时,一切正常。但这不能成为解决办法。任何开机自检呼叫都会收到此错误消息。我知道我需要这个_token。但是当我从 API 调用时如何获得此令牌?我知道我可以在 Laravel 内部创建令牌,但是当我通过 API 从外部调用时,我该如何执行此操作?

通常 API 用于跨站点请求。所以你的CSRF保护是没有意义的。

如果您不打算跨站点使用它,则 API 可能不是您要执行的操作的最佳解决方案。无论如何,您可以创建一个返回令牌的 API 端点。

public function getToken(){
    return Response::json(['token'=>csrf_token()]);
}

如果要在某些方法上禁用CSRF保护,可以使用exceptonly

$this->beforeFilter('csrf', array('on' => 'post', 
                                 'except'=>array('methodName', 'anotherMethod')
                                  ));

请参考官方的Laravel文档。

绝对不要使用这种方法。

打开VerifyCsrfToken类并定义$except属性,该属性将包含一组路由,其中不会应用 CSRF 保护。

示例如下:

<?php
declare(strict_types=1);
namespace App'Http'Middleware;
use Closure;
use Illuminate'Foundation'Http'Middleware'VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
        'api/auth/login',
        'api/*', // this works as well
    ];
    /**
     * Handle an incoming request.
     *
     * @param  'Illuminate'Http'Request $request
     * @param  'Closure                 $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        return parent::handle($request, $next);
    }
}

听听这个。就在30分钟之前,我遇到了同样的问题。现在它解决了。试试这个。

转到应用程序 -> HTTP-> 内核

打开内核文件。

在那里你可以看到: ''App''Http''Middleware''VerifyCsrfToken::class,

只需使用//禁用此特定代码

就是这样!这将起作用!

这样您就可以从 API 调用中删除中间件(如果需要的话......

相关文章:
  • 没有找到相关文章