2016-11-16 3 views
1

Так что мои проблемы в том, что токен сеанса генерируется.CURF-токен дублирования на Vue Router Laravel 5.3 Vue 2 JS

и маркер, который я послал через AJAX или AXIOS (причины им с помощью VUE и VUE маршрутизатор для извлечения API)

получает рассогласование

Это ответ я получил при размещении данных

Аякса маркер равно маркера в мета-тег основного шаблона лезвия

используя этот тег

Мета Т аг в app.blade.php

<meta name="csrf-token" content="{{ csrf_token() }}"> 
<script> 
    window.Laravel = <?php echo json_encode([ 
     'csrfToken' => csrf_token(), 
    ]); ?> 
</script> 

перехватчик Аксиос (цель состоит в том, чтобы впрыснуть csrf_token из мета-тегов)

Vue.axios.interceptors.request.use(function (config) { 

    config.headers['X-CSRF-TOKEN'] = Laravel.csrfToken; 
    console.log(config); 
    return config; 
    }, function (error) { 
    // Do something with request error 
    return Promise.reject(error); 
}); 

Ответ:

array:1 [ 
    "SessionToken" => "JfhmtCaTiQ49BtF2VK3TysvYnEQSE9n5i1uiHegO" 
] 
array:1 [ 
    "AjaxToken" => "WqKOiaunbvJbxIsnEjetFoCm1mvdUYESRqfXO2lv" 
] 

VerifyCSRFToken метод промежуточного слоя:

protected function tokensMatch($request) 
    { 
     $sessionToken = $request->session()->token(); 

     $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN'); 

     dd(['SessionToken' => $sessionToken],['AjaxToken' => $token]); 
     if (! $token && $header = $request->header('X-XSRF-TOKEN')) { 
      $token = $this->encrypter->decrypt($header); 
     } 

     if (! is_string($sessionToken) || ! is_string($token)) { 
      return false; 
     } 

     return hash_equals($sessionToken, $token); 
    } 

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

Вот метод из моего RegisterComponent.vue

submitForm() { 
     this.axios.get('/token') 
      .then(response => { 
       this._token = response.data 
        this.axios.post('/register',this.data) 
         .then(responseNew => { 
          console.log(responseNew.data); 
         }) 
         .catch(responseNew => { 
          this.errors = responseNew.data; 
         }) 
      }); 
    } 

как вы можете видеть им получить маркер из моей api.php в папке маршрутов

и им также с помощью аутентификации апи из Laravel и поставить его на АНИ маршрутах слишком

здесь является api.php

Route::group(['middleware' => 'web'], function() { 
    Auth::routes(); 
}); 

Route::get('/token',function() { 
    dd(csrf_field()); 
}); 
Route::get('/user', function (Request $request) { 
    return $request->user(); 
})->middleware('auth:api'); 

Route::resource('/users','UserController'); 

Route::group(['middleware' => 'auth'], function() { 


Route::resource('/stores','StoreController'); 

Route::resource('/items','ItemController'); 

Route::resource('/transactions','StoreController'); 

Route::resource('/managers','ManagerController'); 

Route::resource('/employees','EmployeeController'); 

Route::resource('/customers','CustomerController'); 

Route::resource('/tags','TagController'); 

}); 

Итак, как я могу предотвратить создание этого токена, который может вызвать несоответствие?

Любой ответить на это, несомненно, поможет подлинности моей SPA (одностраничный App)

и его также дает мне статус ответа 302

+0

Кто-нибудь хочет помочь? –

ответ

0

Вы, кажется, немного недоразумение. У вас есть токен csrf, настроенный для axios, поэтому каждый запрос будет иметь поле заголовка, содержащее токен, тогда вам просто нужно убедиться, что каждый запрос проходит проверку валидации функции larsvel csrf до того, как он достигнет вашей бизнес-логики, вот и все, что вам нужно сделать для предотвращения csrf. get('/token') до post('/register') кажется ненужным.

Кроме того, говорить о самом /token маршруте, csrf_field не уместна, так как он создает скрытое поле формы (другой способ отправить CSRF токен, кроме того, что мы говорили ранее), чтобы быть вложена в .php файл как <form>...<?=csrf_field()?>...</form> =><form>...<input type="hidden" name="laravel_csrf_token" value="***">...</form>, что делает бессмысленным запрос результата csrf_field через xhr.

Смежные вопросы