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);
}
问题是,我在一个重定向循环结束了。
看起来您正在整个应用程序中应用中间件,包括结算页面。因此,您需要指定中间件类应该被考虑的位置,这可以在/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);
这让我走出了重定向循环。我在整个应用程序中都有,但现在我可以看到这是一个问题。即使我现在被锁定到结算页面,即使输入付款信息,它也会运行订阅检查,这会导致它继续返回结算页面。不知道这是最好的办法。 –
最好的方法是编辑内核文件。为什么?因为您可以指定中间件类应该应用于哪个url /路由。表达式'if($ path!=='billing')'只是一个修复,但不是推荐的解决方案。请阅读laravel文档中的一些中间件类,它对如何使用它们有一个很好的解释。最后,如果您需要帮助,我们很乐意为您提供帮助 – manix
我最终为要应用的中间件设置了一个路由组,以便它不被应用到整个应用程序。谢谢您的帮助。非常感谢。 –
嗨。 “开单”是什么?它在你的路线中。 你可以尝试这样的事情,返回Redirect :: route('billing'); – gecco