Laravel中间件和唯一数据

时间:2018-11-04 17:29:27

标签: php laravel laravel-middleware

我有一个中间件,该中间件可以注销被禁止的用户,并将他们重定向到他们了解被禁止原因的特定页面,但是问题是可以为任何用户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。

有什么主意吗?

0 个答案:

没有答案