首页 > 解决方案 > Laravel 一天只允许一次提交

问题描述

昨天遇到一个不知道的问题,在google上搜索了还是没找到,希望有人知道这个问题的原因

我做了一个这样的表格:

<form action="{{ route('file') }}" method="post" enctype="multipart/form-data">
                   
                        <div class="form-group">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control">
                            <span class="help-block text-danger"></span>
                        </div>

                        <div class="form-group ">
                            <label>address</label>
                            <textarea type="text" name="address" class="form-control"></textarea>
                            <span class="help-block text-danger"></span>
                        </div>

                        <div class="form-group ">
                            <label>date</label>
                            <input type="text" name="date" class="date form-control"></input>
                            <span class="help-block text-danger"></span>
                        </div>


                        <div class="form-actions">
                            <button type="submit" class="btn btn-primary">Upload</button>
                        </div>
                    </form>

我的问题是,当有人提交时,有人可以重新提交,我希望有人提交时他不能再次提交,直到一定的时间限制,例如2小时。但是其他没有提交的人仍然可以提交(这就像谷歌表单问卷,人们无需登录)

如果你能解决这个问题,请帮助我,非常感谢

标签: javascriptphphtmllaravel

解决方案


我认为您不需要做任何数据库工作,但这更取决于您的情况。

但是,要直接回答您的问题,您可以Illuminate\Routing\Middleware\ThrottleRequestsfile路线上添加。

节流是在 IP 级别完成的,所以我认为这正是您所需要的:https ://monosnap.com/file/PXayGqUwDI5C3kGwiwgFEFodT70nJd

// route is accessible from IP once every 120 seconds

Route::post('file')->name('file')->middleware('throttle:1,120');

通过这样做,当同一个 IP 在这 120 秒内再次尝试访问该路由时,他会得到一个ThrottleRequestsException异常(您可以在App\Exceptions\Handler课堂上处理)


您可以找到文件throttle中定义的中间件App\Http\Kernel.php

这是它的文档:https ://laravel.com/docs/7.x/routing#rate-limiting


推荐阅读