我有一个中间件,该中间件可以注销被禁止的用户,并将他们重定向到他们了解被禁止原因的特定页面,但是问题是可以为任何用户ID设置URL,并在用户加载时返回尽可能多的URL。
示例 site.co/banned/55
,然后您只需将55
更改为其他用户ID,它就会一遍又一遍地加载。
我想用一次性令牌加载此返回页面,如果他们尝试重新加载此页面或共享链接等,将无法执行。除非他们尝试登录并使用新令牌,否则请参见此页面。
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)
用户ID。
有什么主意吗?