php - 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)
任何想法?
解决方案
推荐阅读
- drools - Drools 对产品目录中的产品进行验证,以确保选择正确的分类
- github - hexo创建的博客在github页面上无效
- asp.net-web-api - 参数化的 MVC6 WebApi 构造函数不使用 Ninject 调用
- java - 如何在统一android插件的子线程中连续调用gles20
- reactjs - 在没有购买证书的情况下签署 Windows Electron 应用程序
- python - 是否可以为 micropython 安装 upm?如果是这样怎么办?
- php - 如何显示存储在数据库中的图像?
- c# - 解决 Visual Studio 依赖项
- typescript - 如何使用 TypeScript 对使用 Moment 的 .js 文件进行类型检查?
- android - 如何将图像分割成4MB的块并上传到android中的服务器