Laravel中间件订阅

问题描述:

我正在尝试在Laravel 5中编写中间件,它将检查用户是否有订阅,并且它不会被取消。如果它不存在或被取消,那么它们将被锁定到一个页面(计费)。问题是,我最终在一个重定向循环。我明白为什么,但我无法弄清楚正确的做法是什么。在此先感谢Laravel中间件订阅

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); 
} 
+0

嗨。 “开单”是什么?它在你的路线中。 你可以尝试这样的事情,返回Redirect :: route('billing'); – gecco

问题是,我在一个重定向循环结束了。

看起来您正在整个应用程序中应用中间件,包括结算页面。因此,您需要指定中间件类应该被考虑的位置,这可以在/app/Http/kernel.php处实现。

此外,您还可以considere进行额外的验证在你的中间件CLAS喜欢:

// 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); 
+0

这让我走出了重定向循环。我在整个应用程序中都有,但现在我可以看到这是一个问题。即使我现在被锁定到结算页面,即使输入付款信息,它也会运行订阅检查,这会导致它继续返回结算页面。不知道这是最好的办法。 –

+0

最好的方法是编辑内核文件。为什么?因为您可以指定中间件类应该应用于哪个url /路由。表达式'if($ path!=='billing')'只是一个修复,但不是推荐的解决方案。请阅读laravel文档中的一些中间件类,它对如何使用它们有一个很好的解释。最后,如果您需要帮助,我们很乐意为您提供帮助 – manix

+0

我最终为要应用的中间件设置了一个路由组,以便它不被应用到整个应用程序。谢谢您的帮助。非常感谢。 –