首页 > 解决方案 > Laravel 中间件和唯一数据

问题描述

我有中间件,它注销禁止用户并将他们重定向到他们阅读被禁止原因的特定页面,但问题是可以为任何用户 ID 设置 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,
];

附言

我想用只工作一次的令牌替换{id}我的路由和中间件中的用户 ID 的一部分。return redirect()->route('banned', $user->id)

任何想法?

标签: phplaravellaravel-middleware

解决方案


推荐阅读