Работаю над приложением 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-реферер на последней странице, и если это маршрут, предшествующий последнему, вы разрешите ему в противном случае перенаправить его на предыдущую страницу. Это можно реализовать для каждой страницы.
Другим способом может быть база данных. Для каждого посещения страницы вы можете иметь запись в базе данных и проверять на следующей странице, есть ли запись, в противном случае перенаправить его туда, куда вы хотите.
,, Спасибо, на ваше предложение, как я могу использовать http-referrer, чтобы предотвратить доступ пользователя к последней странице перед заполнением любой из предыдущих страниц ..
В вашем контроллере проверьте url () -> previous () или URL :: previous (), или у вас может быть промежуточное ПО для проверки того же. laravel.com/docs/5.7/helpers#method-url
Или, если вы можете применить промежуточное программное обеспечение к последнему маршруту, чтобы проверить это, вместо того, чтобы входить в контроллер. Также - не ответ, но вместо того, чтобы использовать несколько страниц, вы могли бы посмотреть что-то еще на одной странице. Взгляните на пример Chaining modals (queue) по этой ссылке: sweetalert2.github.io/#examples
Вы можете создать класс промежуточного программного обеспечения, а затем использовать его непосредственно в вашем файле 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);
битый на 55 сек, кстати, вот ссылка: laravel.com/docs/5.7/middleware
Вообще говоря, у вас может быть промежуточное программное обеспечение, которое проверяет, был ли предыдущий маршрут завершен пользователем. Однако то, что будет содержать это промежуточное ПО, во многом зависит от того, как вы все реализовали. Я предполагаю, что результаты первой секунды и части квитанции хранятся в сеансе или в базе данных, поэтому вы можете получить их в промежуточном программном обеспечении.