Laravel Axios在使用Vue时返回状态码419失败。
Laravel Axios在使用Vue时返回状态码419失败。
概念:我有一个应用程序,允许用户发布问题...当用户点击“提问”按钮时,我尝试使用Vue.js和Axios提交问题。\n问题:70%的时间,问题会成功提交,但30%的时间会失败,并返回“无法加载资源:服务器响应状态为419(未知状态)”。\n我的Vue组件:\n\n \n \n
- \n
- \n \n
\n
\n\n\n\n我的Web.php:\n
Route::post('/timeline', 'FeedController@storeFeed');
\n我的控制器:\n
public function storeFeed(Request $request) { if($request->feed_type == 'Debate'){ $this->validate(request(), [ 'feed_subject' => 'required', 'feed_body' => 'required', ]); $publishedFeed = Auth::user()->publishDebate($request); }elseif($request->feed_type == 'Question'){ $this->validate(request(), [ 'feed_body' => 'required', ]); $publishedFeed = Auth::user()->publishQuestion($request); }else{ $this->validate(request(), [ 'feed_body' => 'required', ]); $publishedFeed = Auth::user()->publishPost($request); } return $publishedFeed->id; }
\n我的HTML头部:\n
\n我的resources\\assets\\js\\Bootstrap.js:\n
window.axios = require('axios'); window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; /** * 接下来,我们将注册CSRF令牌作为Axios的公共头部,以便 * 所有传出的HTTP请求自动附加。这只是 * 一种简单的便利,不必手动附加每个令牌。 */ let token = document.head.querySelector('meta[name="csrf-token"]'); if (token) { window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; } else { console.error('找不到CSRF令牌:https://laravel.com/docs/csrf#csrf-x-csrf-token'); }
在使用Vuejs/Laravel应用时,遇到了一个问题:使用Axios发送put/post请求时,返回了一个状态码为419的错误。可以通过以下步骤重现该问题:
- 正常使用Vuejs/Laravel应用。
- 在控制器中使用
\Session::flush()
刷新页面:public function getProduct(Request $request) { \Session::flush(); return view('product'); }
- 从客户端发起put/post请求,将会返回一个状态码为419的错误。
- 这很可能是因为开发环境中会话过期导致的,可以尝试将会话的生命周期设置为更长的时间,看看是否可以解决这个问题。
解决方法:将会话的生命周期设置为更长的时间。