Laravel 用于订阅的中间件

Laravel middleware for subscription

我正在尝试在 Laravel 5 中编写中间件来检查用户是否有订阅,并且订阅没有被取消。如果它不存在或被取消,那么他们将被锁定在一个页面(计费)中。问题是,我最终陷入了重定向循环。我明白为什么,但我就是想不通正确的做法是什么。提前致谢

public function handle($request, Closure $next)
{


    if (\Auth::check()) 
    {
        // if subscription does not exist
        if (\Auth::user()->hospital->subscription == null || \Auth::user()->hospital->subscription !== 'Active') {
           return redirect('billing');
        }

    }
    return $next($request);
}

Problem is, I end up in a redirect loop.

看起来您正在整个应用程序(包括计费页面)中应用中间件。因此,您需要指定应考虑中间件 class 的位置,这可以在 /app/Http/kernel.php.

处实现

此外,您可以考虑在您的中间件类中进行额外的验证,例如:

// billing (http://example.com/billing)
$path = $request->path();

if ($path !== 'billing')
{

    if (\Auth::check()) 
    {
        // if subscription does not exist
        if (\Auth::user()->hospital->subscription == null || \Auth::user()->hospital->subscription !== 'Active') {
           return redirect('billing');
        }

    }
}
return $next($request);