laravel - axios帖子上的403(禁止)。拉拉维尔 5.7

标签 laravel

我正在尝试在 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)
            })
        }

处理它的 Controller 函数:

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']);
    }

我找不到问题。我一直在使用其他模型,这是第一个抛出此错误的模型。

最佳答案

让我们将自定义请求中的 authorize() 函数更改为 return true 而不是 return false

此函数用于根据权限允许或禁止访问。

关于laravel - axios帖子上的403(禁止)。拉拉维尔 5.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54245372/

相关文章:

Javascript:在 alpacajs 表单名称字段中使用括号?

laravel - throwValidationException 方法不存在

javascript - 如何在给定格式的 HTML 列表中显示 jQuery 数据值?

javascript - Laravel 4.2 尝试解释 Backbone.js 模板变量

laravel eloquent 匹配多字表名时遇到问题

php - Laravel 5.1 本地化工厂播种机

php - Laravel 错误锁定数据库 vs 事务中断

php - Laravel 5 通过 ajax 发出 DELETE 请求 - 方法不允许

Mysql Azure 无法与 Laravel 连接

mysql - 如何用 Eloquent 方式从单个列和数组中获得不同的结果?