php - Laravel Vue 如何从 Vue 更新用户表中的列
问题描述
我想从 Vue 向 Laravel 发送一个请求,以更新当前登录用户的列。
到目前为止,我已经设置了 Vuex,我正在使用 axios 发送一个发布请求。但是我不断收到错误 419。这显然意味着它是一个 CSRF 令牌问题。
我如何将 CSRF 令牌解析到我的后端我的代码中的当前方法不起作用。
有没有更容易的替代路线。
api.php 中的路由
Route::group(['middleware' => 'web'], function () {
Route::post('prequalify', 'OfferController@update');
});
控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\User;
class OfferController extends Controller
{
function update(Request $request){
$user = Auth::user();
return $user;
//Send Request to Majestic and get a response
$response = true;
if($response){
$user->is_qualified = true;
}else{
$user->is_qualified = false;
}
$user->save();
return $request;
}
}
Vue 方法,我能够获得 CSRF 令牌。
preQualify(){
let csrf= document.querySelector('meta[name="csrf-token"]').getAttribute('content')
this.$store.dispatch('prequalify',{csrf});
}
VUEX 动作
import axios from 'axios';
let actions = {
prequalify({commit,state}, payload){
axios.defaults.headers.common['X-CSRF-TOKEN'] = payload.csrf;
axios.post('/api/prequalify',state.LoanCalculator)
.then(res => {
console.log(res);
})
}
}
export default actions
解决方案
在您api.php
使用web
的中间件中,该中间件会检查VerifyCsrfToken
中间件,该中间件负责验证CSRF
令牌以及为您提供的419
功能,为了使其更简单,您需要删除web
中间件
Route::group(['middleware' => []], function () {
Route::post('prequalify', 'OfferController@update');
});
在这种情况下,无需发送X-CSRF-TOKEN
您的axios
电话。
注意- 如果prequalify
端点要求对用户进行身份验证,您需要使用与auth
您正在使用的系统相对应的正确中间件,其中可以passport
或sanctum
.
推荐阅读
- javascript - 如何在打开组件模式时将焦点设置在 textarea 上
- google-apps-script - 带有刷新按钮的摘要表上的列表表选项卡名称
- c - 为什么 open-std.org 仍将 C11 列为 C 的最新版本?
- django-models - Django DRF 序列化器:不同 PK 上的多对多
- r - 错误:列 comp.count 的长度必须为 1
- angularjs - 我如何使用 $rootScope.$emit 和 $root.Scope.On?
- android - 尝试从 firebase 获取文件下载 url 时出现 Firebase 错误
- build - cmake 到 bazel - cppyy - 共享库和包含路径
- sql - 如何在 var char 列中仅对数字求和并分别显示字符串
- msmq - 在最大中止失败后未触发移动到 Rebus 错误队列