#php #laravel #laravel-5.2
#php #laravel #laravel-5.2
Вопрос:
Я получил страшную ошибку VerifyCsrfToken в моем проекте Laravel 5.2.
Соответствующие коды приведены ниже:
Маршрут, который выдает ошибку
Route::group(['middleware' => ['web']], function(){
Route::resource('register', 'RegisterController');
});
При попытке зарегистрировать нового пользователя с помощью POST-запроса выдается ошибка
Контроллер регистра
public function store(Request $request)
{
return AppUser::create([
'name' => $request->input('name'),
'email' => $request->input('name'),
'contact_number' => $request->input('contact_number'),
'api_token' => str_random(60),
'password' => $request->input('password'),
]);
}
Ожидаемый результат
{
"email": "test.name",
"contact_number": "654987123",
"updated_at": "2016-10-06 06:30:26",
"created_at": "2016-10-06 06:30:26",
"id": 4
}
Что отличает мой вопрос от других вопросов о несоответствии VerifyCsrf, так это то, что у меня нет формы для добавления {{ csrf_token() }}
скрытого поля. Я только что отправил запрос с помощью Postman (и curl), и пользователь должен быть зарегистрирован.
Когда я выполняю следующее редактирование на app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
'/*'
//
];
Ошибка исчезает, и она работает так, как должна, но я не думаю, что это рекомендуемый способ.
Спасибо
Комментарии:
1. Чего именно вы пытаетесь достичь, и ДА, добавление «/ *» совсем не рекомендуется.
2. @GauravDave из приведенных выше кодов все, что я хочу сделать, это зарегистрировать пользователя (это был просто тест, а не окончательная версия), поэтому я отправляю необходимые данные в теле с помощью postman и link is
localhost:8000/register
. И я хочу, чтобы данные были введены в базу данных.3. Кто проголосовал против этого :/
4. используете ли вы какой-нибудь javascript? или просто php? Если вы используете php, используйте Form helper, он подготовит для вас csrf.
5.
<meta name="csrf-token" content="{{ csrf_token() }}">
добавьте это в свой блейд, если вы не используете форму.
Ответ №1:
Сохраните токен в корневом файле блейда. если вы используете только представление по умолчанию, то может быть в layout/main.blade.php
<meta name="csrf-token" content="{{ csrf_token() }}">
Если вы используете jQuery, теперь вы можете указать ему включить токен во все заголовки запроса.
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Если вы все еще получаете ошибки, выполните следующие действия: https://gist.github.com/ethanstenis/3cc78c1d097680ac7ef0
Комментарии:
1. Снимаю шляпу перед вами, сэр. Очень признателен. Я следовал инструкциям в сообщении github, и теперь он работает на Postman. Если я включу заголовок в свой http-запрос, мой api должен работать, верно?
2. я рад, что это помогло.