2015-06-10 3 views
8

Я пытаюсь поговорить с моим REST API, созданным с помощью Laravel. Но вызов с POSTMAN отклоняется из-за несоответствия токенов. Думаю, мне нужно включить токен CSRF в заголовок. Но нужен ли мне зашифрованный? Когда я вставляю этот токен, я все равно получаю ошибку, что есть несоответствие токенов.Несоответствие Laravel X-CSFR-Token с POSTMAN

я получить мой маркер с помощью:

$encrypter = app('Illuminate\Encryption\Encrypter'); 
    $encrypted_token = $encrypter->encrypt(csrf_token()); 
    return $encrypted_token; 

, но это должно измениться при каждом обновлении?

ответ

8

Если вы не используете формы - для API, например - вы можете следовать шаги, описанные здесь https://gist.github.com/ethanstenis/3cc78c1d097680ac7ef0:

По существу, добавьте следующие строки в лезвие или заголовок веточки

<meta name="csrf-token" content="{{ csrf_token() }}"> 

Установите Почтальон перехватчик, если он еще не установлен, и включите его

Затем, в вашем браузере л ог на сайт (вы должны быть разрешены), а также инспектировать элемент или вид источника для получения маркера

В Почтальон, установите GET/POST и т.д., как это необходимо, и в вашем заголовке создать новую пару

X-CSRF-TOKEN  tokenvaluetobeinserted235kwgeiOIulgsk 

Некоторые люди рекомендуют отключать токен CSRF при тестировании API, но тогда вы на самом деле не проверяете его.

Если у вас все еще есть ошибки, проверьте ответ, используя preview, поскольку Laravel имеет тенденцию быть достаточно явным с сообщениями об ошибках. Если ничего не вернется, проверьте свой php_error.log (что он когда-либо называется).

+1

Вы пишете один единичный тест для CSRF, если это необходимо, и для других тестов вы можете отключить его ... вы утверждаете что-то вроде «Я хочу проверить некоторые функции администратора A, но мне нужно войти в систему, чтобы я также тестировал когда я тестирую функциональность A ". Не тестировать CSRF с каждым post/patch/put в порядке - если у вас есть отдельный модульный тест строго для CSRF. – Kyslik

3

Да, он меняет каждое обновление. Вы должны поместить его в представление, и когда вы отправляете его, его нужно отправить как значение «_token» POST var.

Если вы только с помощью стандартного POST просто добавьте в форму:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"> 

Если вы используете AJAX убедитесь, что вы хватаете значение _token и передать его просьбу.

REF: http://laravel.com/docs/5.1/routing#csrf-protection