Laurvel API TokenMismatchException

У меня есть API-запрос с данными о сообщениях; скажем, это процесс входа в систему.

С расширением Postman от Chrome я отправляю через 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 получит это сообщение об ошибке. Я ЗНАЮ, что мне нужно это. Но как я получаю этот токен, когда звоню из 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') )); 

Пожалуйста, обратитесь к официальной документации 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 минутой я столкнулся с этой же проблемой. Теперь он решил. просто попробуйте это.

Goto App -> HTTP-> Kernel

откройте файл ядра.

там вы можете увидеть: \ App \ Http \ Middleware \ VerifyCsrfToken :: class,

просто отключите этот конкретный код, используя //

Это! Это сработает!

Чтобы вы могли удалить промежуточное программное обеспечение из вызова API (если вы этого хотите).