【问题标题】:Problems with middleware中间件问题
【发布时间】:2021-07-23 06:12:11
【问题描述】:

Laravel 忽略了我的中间件。我有一个中间件,可以检查您在我们的网站上是否有账单信息。如果您拥有它们但管理员未验证它们,则中间件必须继续阻止。或者,如果他们被拒绝。

class HasBilling {

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

       $user_profile = UsersProfile::where('user_id', Auth::id())->first();
        if (!is_object($user_profile) && !\Auth::user()->hasPermissionTo('soy-agente') && !\Auth::user()->hasPermissionTo('soy-agente_inversor')) {
            return redirect()->route('myaccount.facturacion.ver')->with('error', 'No posees datos de facturación. Antes de usar algunas funciones como facturación, publicidad, merkado, tarifas... debes rellenar los datos.');
        }

        if(is_object($user_profile) && is_null($user_profile->validate)){
            return redirect()->route('myaccount.facturacion.ver')->with('error', 'Tus datos de facturación están pendiente de validar');
       
        }

        if(is_object($user_profile) && $user_profile->validate == 2)){
            return redirect()->route('myaccount.facturacion.ver')->with('error', 'Tus datos de facturación han sido rechazados.');
       
        }

        return $next($request);
    }

}

“user_profile”不是对象的部分有效。但是其他两个 if 完全被忽略了。由于 "validate" null 或值为 "2" 的对象不起作用。

我在内核上注册的中间件:

protected $routeMiddleware = [
    ...
    'hasbilling' => \App\Http\Middleware\HasBilling::class,
];

我的中间件应用了:

public function __construct()
{
    $this->middleware(['auth', 'verified']);

    $this->middleware('hasbilling');
}

有人可以帮助我吗?我不知道它可能在哪里失败。

【问题讨论】:

    标签: laravel middleware


    【解决方案1】:

    所以这看起来像是一个逻辑错误。如果第一个块正在执行,则使用中间件,除非另一个中间件做同样的事情。

    您始终可以将 $user_profile 转储到中间件中,并查看实际检查的数据。 dd($user_profile);

    【讨论】:

      【解决方案2】:

      你没有继承Middleware类。

      <?php
      namespace App\Http\Middleware;
          
      class HasBilling extends Middleware
      {
      ...
      

      【讨论】:

      • 您好,我尝试扩展中间件,但出现此错误Class 'App\Http\Middleware\Middleware' not found
      • @XQUJAGGER 在文件顶部包含命名空间。
      • 我得到了这个命名空间,包括:namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; use Illuminate\Http\Request; use App\UsersProfile; use App\UsersProfileAutorizado; 并且不起作用
      • @XQUJAGGER 还在抛出Class 'App\Http\Middleware\Middleware' not found 错误?
      • 是的兄弟,我不知道
      猜你喜欢
      • 1970-01-01
      • 2012-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      相关资源
      最近更新 更多