阻止用户访问Laravel中的某些路由

阻止用户访问Laravel中的某些路由,laravel,routes,Laravel,Routes,在处理Laravel应用程序时,我有一些路由,这些路由是多步骤的形式。我需要阻止用户在访问或填写以前的路由之前访问最后一条路由(指向表单的最后一页) 路线 Route::get( '/first', 'TrController@payQuote')->name('b2c.payquote'); Route::get( '/second', 'TrController@emailQuote')->name('b2c.sendquote'); Route::get( '/receipt'

在处理Laravel应用程序时,我有一些路由,这些路由是多步骤的形式。我需要阻止用户在访问或填写以前的路由之前访问最后一条路由(指向表单的最后一页)

路线

Route::get( '/first', 'TrController@payQuote')->name('b2c.payquote');
Route::get( '/second', 'TrController@emailQuote')->name('b2c.sendquote');
Route::get( '/receipt', 'TrController@getReceipt')->name('b2c.receipt');
Route::get( '/success', 'TrController@getSuccess')->name('b2c.success');

有多种方法可以做到这一点。一种方法是,您可以在最后一个页面上检查http Referer,如果它是上一个页面之前的路由,则允许它重定向到上一个页面。这可以在每个页面上实现


另一种方式可以是数据库驱动。对于每个页面访问,您可以在数据库中有一个条目,并在下一页检查是否有条目,否则将他重定向到您想要的任何地方。

您可以创建一个中间件类,然后直接在
路由文件中使用中间件

例如:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckPermission
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // TODO: Add your logic here.

        if ($request->age <= 200) {
            return redirect('home');
        }

        return $next($request);
    }
}

,,谢谢,在您的建议中,我如何使用http Referer阻止用户在填充前一页之前访问最后一页..在控制器中检查url()->previous()或url::previous(),或者您可以使用中间件进行检查。或者,如果您可以将中间件应用于最后一条路由,以检查这一点,而不是将其应用于控制器。另外-不是答案,而是使用多页,你可以看更多的单页内容。看看这个链接上的链接模式(队列)示例:被55秒击败,顺便说一句,这里是链接:大体上,你可以使用中间件来检查用户是否已经完成了上一个路由。不过,中间件将包含什么在很大程度上取决于您如何实现所有内容。我将假设第一个、第二个和接收部分的结果存储在会话或数据库中,以便您可以在中间件中检索它们
Route::get('admin/profile', function () {
    //
})->middleware(CheckPermission::class);