【发布时间】:2019-06-12 05:03:25
【问题描述】:
我正在尝试在 vuejs 组件上使用 axios 执行发布请求,它会引发 403 forbidden 错误。这是我发布请求的 javascript 代码:
createMessage() {
axios.post('/mensajes/guardar', {
subject: this.subject,
username: this.username,
content: this.editorContent
})
.then((res) => {
this.formProcessed = true
this.swalMixin('success', '¡Mensaje enviado!')
setTimeout(() => { window.location = '/mensajes' }, 3000)
})
.catch((err) => {
let errors = err.response.data.errors
let firstError = Object.keys(errors)[0]
let message = errors[firstError][0]
this.swalMixin('error', message)
})
}
处理它的控制器函数:
public function store(MessageStoreRequest $request)
{
$recipient = User::where('username', $request->username)->firstOrFail();
$message = Message::create([
'sender_id' => Auth::id(),
'recipient_id' => $recipient->id,
'subject' => $request->title,
'content' => $request->content,
]);
return response()->json([
'message' => 'success'
], 200);
}
我的消息模型路由组:
Route::prefix('mensajes')->middleware(['auth', 'verified'])->group(function () {
Route::get('/', 'MessageController@index')->name('message.index');
Route::get('/ver/{id}', 'MessageController@show')->name('message.show');
Route::get('/crear', 'MessageController@create')->name('message.create')->middleware('can:create,App\Message');
Route::post('/guardar', 'MessageController@store')->name('message.store')->middleware('can:create,App\Message');
});
我创建了一个自定义请求来处理验证:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MessageStoreRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'subject' => 'required|min:12',
'username' => 'required|',
'content' => 'required|min:37'
];
}
/**
* Custom message for validation
*
* @return array
*/
public function messages()
{
return [
'subject.required' => 'El asunto es obligatorio.',
'subject.min' => 'El asunto debe contener al menos 10 caracteres.',
'username.required' => 'El destinatario es obligatorio.',
'content.required' => 'El contenido del mensaje no puede estar vacío.',
'content.min' => 'El contenido del mensaje debe ser de al menos 30 caracteres.'
];
}
/**
* Filters to be applied to the input.
*
* @return array
*/
public function filters()
{
return [
'subject' => 'trim',
'username' => 'trim',
'content' => 'trim'
];
}
}
消息模型有这个政策:
/**
* Determine whether the user can create messages.
*
* @param \App\User $user
* @return mixed
*/
public function create(User $user)
{
return $user->hasAccess(['create-message']);
}
我找不到问题。我一直在与其他模型一起工作,这是第一个引发此错误的模型。
【问题讨论】:
-
我猜它与 CSRF 相关,希望这些链接对您有所帮助:laravel.com/docs/5.7/csrflaracasts.com/discuss/channels/laravel/…
-
这就是问题所在。在没有 CSRF 令牌的情况下,我一直在其他 VueJS 组件中做同样的事情。这是第一个问题,其他模块工作正常。
-
@EnriqueBermúdez 可能是标题,如果其他视图有 csrf 令牌元,那么他们没有失败。
-
@nyu.exe 我执行此发布请求的其他组件(vue 组件)具有完全相同的结构。我刚刚注意到的是,用我的函数中的
Request替换MessageStoreRequest会将错误变成404 not found 所以它可能是自定义请求,但我看不到错误。
标签: laravel