2017-01-23 6 views
1

Я использую Vue js для SPA и Laravel для бэкэнд. Все работает нормально, но как только форма была отправлена, crsf-токен, очевидно, не обновился, поэтому, когда я перехожу к другой, я получаю TokenMismatchException.Значок CSRF с использованием SPA

Я не могу поместить токен csrf в форму, поскольку vue выдает ошибку, когда она пытается отобразить, поскольку форма является компонентом в vue.

я могу получить доступ к токен CSRF, используя общие заголовки VUE по умолчанию путем поиска name=_token, который будет работать по первому требованию, но на любые запросы после Laravel возвратит TokenMismatchException как маркер был использован недавно вошедшего в систему пользователя.

Мне нужно выяснить способ, чтобы токен можно было обновить, не обновляя страницу, так как тогда это не будет SPA.

Любая помощь будет оценена по достоинству.

Спасибо.

+0

Нет, это просто говорит, как получить доступ к токену csrf. Я могу это сделать, как я объяснил. Проблема заключается в том, что, как только я зарегистрировался, например, я не могу использовать тот же токен csrf снова, его нужно обновить, но, увидев, что страница не обновляется, токен не может обновиться. @manniL – Jack

+0

вы можете: 1) https://laravel-news.com/excluding-routes-from-the-csrf-middleware 2) генерировать новый токен каждый раз за xhr –

+0

Какое промежуточное программное обеспечение вы используете? – Chris

ответ

0

Что-то напуганное происходит внутри вашей установки, возможно, некоторые конфигурации с Vue, как ваше второе утверждение откусило:

я могу получить доступ к токен CS, используя общие заголовки VUE по умолчанию, в поисках имени = _token, который будет работать по первому запросу, но по любые запросы после того, как Laravel вернет TokenMismatchException, поскольку токен был использован недавно зарегистрированным пользователем.

Вышеуказанное просто не так, если только они не вышли из системы и не вошли в систему, иначе вы можете продолжать использовать тот же токен.

Я создаю пару СПА с Laravel в качестве бэкэнд в настоящий момент, единственный раз, когда я делаю фактическое традиционное представление формы, во время входа в систему или выхода из системы (так что полное обновление страницы). В остальное время это одна и та же страница, использующая один и тот же токен.

1

Вы можете создать локальную переменную с жетоном значением CSRF и назначить его в окно, как так (в основной файл компоновки лезвий):

<script> 
window.AppSettings = { 
    csrfToken: "{{ csrf_token() }}" 
} 
</script> 

затем в запросе/вю-ресурсов AXIOS использовать его :

axios.post("/some/path", { my: data, _token: AppSettings.csrfToken }) 
    .then(response => { 
     console.log(response.data); 
    }) 

другой обходной путь (не рекомендуется вообще), чтобы отключить его в пО промежуточного слоя

в app/Http/Middleware/VerifyCsrfToken.php

protected $except = [ 
    "your/path/to/ignore" 
]; 

Но я пошлю первый вариант.