中间件适用于 localhost 但不适用于 apache2 VM 服务器

Middleware works on localhost but not on apache2 VM server

标题几乎概括了它。 我有一个 laravel 应用程序,我在我的笔记本电脑上开发并在 127.0.0.1/8000 上 运行 时进行测试 - 我刚刚为不同的用户(管理员、员工和门户用户)添加了中间件

当未登录并尝试访问管理路由 (127.0.0.1/8000/admin/reporting) 时,我成功地被拒绝并重定向到主页。现在我将其推送到 GitHub 并拉入 ubuntu 虚拟机,我仔细检查了更改。

但是当我访问服务器的URL时,我仍然可以访问所有页面而不需要验证。

你们中有人遇到过类似的问题吗?我不确定我应该提供什么代码,所以请告诉我,我会将其添加到 post.

谢谢

编辑:中间件代码

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin' => \App\Http\Middleware\AdminMiddleware::class,
        'employee' => \App\Http\Middleware\EmployeeMiddleware::class,
        'portal' => \App\Http\Middleware\PortalMiddleware::class,
    ];

管理中间件:

 public function handle(Request $request, Closure $next)
    {
       if (!Auth::user() || Auth::user()->abteilung_name != 'Geschäftsführung') {
           return redirect('/')->with('redirect_error', 'Auf diese Seite haben Sie keinen Zugriff');
       }
        return $next($request);
    }

员工中间件:

 public function handle(Request $request, Closure $next)
    {
        if (!Auth::user() || !auth()->user()) {
            return redirect('/')->with('redirect_error', 'Auf diese Seite haben Sie keinen Zugriff');
        }
        return $next($request);
    }

门户中间件:

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

        if (!Auth::user() || !Auth::guard('portal')->user()) {
            return redirect('/')->with('redirect_error', 'Auf diese Seite haben Sie keinen Zugriff');
        }
        return $next($request);
    }

这是一个示例路由,所有其他路由看起来都差不多 - 只是末尾的中间件因路由而异。

Route::get('/admin/reporting', [AdminController::class, 'getReportingView'])->name('reporting')->middleware('admin');

您的路线似乎已缓存。由于这是在您的服务器(主机)上,您应该重新缓存路由:

php artisan route:cache

您应该将这部分作为部署过程以及重新缓存配置 (php artisan config:cache)、运行ning composer install、运行ning 迁移 (php artisan migrate), 等等

如果这不是真正的实时站点并且您仍在开发中,您也可以根本不缓存路由,那么您就不需要在每次更改路由时都重新缓存它们。您可以使用 php artisan route:clear 清除缓存。这就是在没有缓存路由的情况下在本地 运行 的方式。只要确保在部署实时站点时缓存路由是您过程的一部分即可。