Laravel API TokenMismatchException

Eu tenho uma chamada de API com dados de postagem; Digamos que este seja o processo de login.

Com a extensão do Postman do Chrome, envie, via POST, o nome de usuário e senha para registrar o usuário. Mas recebi esta mensagem:

Illuminate \ Session \ TokenMismatchException 

No meu Controlador Base eu tenho:

  /** * Initializer. * * @return void */ public function __construct() { // CSRF Protection $this->beforeFilter('csrf', array('on' => 'post')); // Layouts/Notifications $this->messageBag = new Illuminate\Support\MessageBag; } 

Quando eu excluir a linha com o beforeFilter, tudo funciona bem. Mas isso não pode ser uma solução. Qualquer chamada POST receberia essa mensagem de erro. Eu sei que eu preciso desse _token. Mas como eu obtenho esse token quando eu chamo da API? Eu sei que posso criar um token dentro do Laravel, mas como posso fazer isso quando ligue de fora via API?

Geralmente, as APIs são usadas para solicitações de sites cruzados. Portanto, sua proteção CSRF é inútil.

Se você não vai usar isso no cross-site, é provável que uma API não seja a solução ideal para o que você está tentando fazer. De qualquer forma, você pode criar um ponto final da API que retorna um token.

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

Se você deseja desativar a proteção CSRF em alguns methods , você pode usar, except ou only .

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

Consulte a documentação oficial da Laravel .

Absolutamente não use essa abordagem.

Abra a class VerifyCsrfToken e defina $except propriedade que conterá uma série de rotas, onde a proteção CSRF não será aplicada.

Exemplo abaixo:

  

apenas ouça isso. Pouco antes de 30 minutos eu estava enfrentando esse mesmo problema. Agora resolveu. apenas tente isso.

Goto App -> HTTP-> Kernel

abra o arquivo do kernel.

lá você pode ver: \ App \ Http \ Middleware \ VerifyCsrfToken :: class,

basta desativar esse código específico usando //

É isso! Isso funcionará!

Para que você possa remover o middleware da API chamada (se desejar assim …)