У меня есть промежуточное ПО, которое выходит из системы заблокированного пользователя и перенаправляет его на определенную страницу, где они читают о причине, по которой его забанят, но проблема в том, что URL может быть установлен для любого идентификатора пользователя и возвращать столько, сколько пользователи загружают его.
Пример site.co/banned/55
затем вы просто меняете 55
на идентификатор другого пользователя, и он загружается снова и снова.
Что я хочу
Я хочу загрузить эту возвращающую страницу с помощью одноразового токена , и если они попытаются перезагрузить эту страницу или поделиться ссылкой и т. Д., Они не смогут. Если они не попытаются войти и с новым токеном, см. Эту страницу.
код
middleware
class NotBlocked
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check())
{
$user = Auth::user();
if(count($user->bans) > 0){
foreach($user->bans as $ban){
$expires = $ban->blocked_on;
}
if ($expires >= Carbon::now())
{
Auth::logout();
return redirect()->route('banned', $user->id)->with('warning', 'Your session has expired because your account is deactivated.');
}
}
}
return $next($request);
}
}
route
Route::get('banned/{id}', 'Front\HomeController@banned')->name('banned');
route groups
Route::middleware('notBlocked')->group(function () {
//all routes here
});
kernel
protected $routeMiddleware = [
// middlewares
'notBlocked' => \App\Http\Middleware\NotBlocked::class,
];
PS
Я хочу заменить {id}
часть в моем маршруте и return redirect()->route('banned', $user->id)
идентификатор пользователя в промежуточном программном обеспечении токеном, который работает только один раз.
Есть идеи?