【问题标题】:Prevent user from accessing some routes in Laravel阻止用户访问 Laravel 中的某些路由
【发布时间】:2019-01-10 09:04:49
【问题描述】:

在 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');

【问题讨论】:

  • 从广义上讲,您可以使用中间件来检查用户是否完成了先前的路由。该中间件将包含什么在很大程度上取决于您如何实现所有内容。我假设第一秒和收据部分结果存储在会话或数据库中,因此您可以在中间件中检索它们

标签: laravel routes


【解决方案1】:

您可以创建一个中间件类,然后直接在您的routes 文件中使用该中间件。

例子:

<?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);
    }
}

然后在你的路由文件中:

Route::get('admin/profile', function () {
    //
})->middleware(CheckPermission::class);

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • ,,谢谢,关于您的建议,我如何使用 http-referrer 来防止用户在填写之前的任何页面之前访问最后一页..
  • 在您的控制器中检查 url()->previous() 或 URL::previous() 或者您可以使用中间件进行检查。 laravel.com/docs/5.7/helpers#method-url
  • 或者,如果您可以将中间件应用于最后一个路由来检查这一点,而不是进入控制器。另外-不是答案,而是使用多页,您可以查看更多单页。在此链接上查看链接模式(队列)示例:sweetalert2.github.io/#examples
猜你喜欢
  • 2020-05-08
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
相关资源
最近更新 更多