HTTPl Middleware是一种用于过滤通过您的应用程序的HTTP请求的机制。中间件允许您在业务逻辑周围添加其他层。
我正在启动一个 SaaS,为了避免拥有太大的数据库,并帮助调试,我希望每个用户都使用自己的数据库,而不重复 laravel 应用程序。 我一直在建议我们...
laravel 11 目标类[角色]不存在(spatie/laravel-permission)
我正在开发 REST API laravel 11 应用程序,我安装了 spatie/laravel-permission,我可以在登录时成功创建用户并分配角色,我可以成功捕获令牌和角色,但是当我...
我在Laravel中使用Cache来禁止垃圾IP,寻找更好的解决方案
我就是这样做的: $ip = $request->ip(); if (Cache::has('banned_ip_' . $ip)) { 返回响应()->json([ '消息' => '访问被阻止', '原因' => '你已经
我正在尝试向在routes/web.php 中获得的一组路由添加一个新的中间件 路由::group(['中间件'=>['xFrameOptionsHeader','VerifyHeaders']], function(){ 路线::get('/', '
Laravel 项目 我创建了一个名为 company_code 的自定义 Postman 标头,它适用于我 PC 上的本地开发环境。 但是,当我在实时服务器上部署此项目时,自定义
Laravel 5:自定义中间件设置的 cookie 在控制器中不可读
我使用 Laravel 5 创建了一个网站。为了跟踪其他网站引用的用户,我使用以下中间件,该中间件通过请求参数识别引用并...
Laravel Livewire 3 覆盖 HTTP 响应标头
我们在我的应用程序中有这个中间件,因为内部安全要求我们覆盖这些响应标头。 类 NoCacheControlHeaders { 公共函数句柄(请求$ request,关闭$ next) ...
我正在尝试添加一个非常简单的访问者日志记录到我的 Laravel 站点,只需添加一个带有日志行的新中间件,但我在每个请求上收到两个日志条目? 中间件非常简单...
我使用以下代码创建了一个 Laravel 中间件: 我用这段代码创建了一个 Laravel 中间件: <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; use App\Containers\Modals\Models\Modal; class ModalsMiddleware { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next, string $modalNames): Response { $modals = explode(',', $modalNames); foreach ($modals as $modalName) { $modal = Modal::where('slug', $modalName)->first(); if (!$modal->enabled) { abort(404); } } return $next($request); } } 然后我更新了Kernel.php: ** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array<string, class-string|string> */ protected $routeMiddleware = [ ..., 'modals' => \App\Http\Middleware\ModalsMiddleware::class, ]; 对于我的路线组,我添加了以下内容: Route::group([ 'prefix' => 'api/v1/routeName', 'middleware' => ['auth:api', 'modals:AModalName'] ], function() {...}); 然后我跑了: php artisan optimize && php artisan config:cache && php artisan cache:clear && php artisan config:clear && composer dump-autoload 然后停止服务然后我重新运行应用程序 但是我遇到了这个错误: "message": "Target class [modals] does not exist.", "exception": "Illuminate\\Contracts\\Container\\BindingResolutionException", 我该如何解决这个问题? 在 Larave 11 中,您必须在 bootstrap/app.php 文件中注册中间件。 ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'modals' => \App\Http\Middleware\ModalsMiddleware::class, ]); }) 更多详情请访问官方文档。
我想创建中间件,当我想访问网站页面时,我必须先进行第二次登录,如果我没有令牌,则页面将重定向到登录页面。我输入了代码
这是我的引导应用程序中间件文件: 这是我的引导应用程序中间件文件: <?php use App\Http\Middleware\AdminMiddleware; use App\Http\Middleware\RegistrarMiddleWare; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->alias(['type.admin' => AdminMiddleware::class]); $middleware->alias(['type.registrar' => RegistrarMiddleWare::class]); // }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); 中间件文件 <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class AdminMiddleware { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { if (request()->user()->tokenCan('role:admin')) { return $next($request); } return response()->json('Not Authorized', 401); } } api文件 Route::post('/employee/register', [AuthController::class, 'EmployeeRegister'])->middleware(['auth:sanctum', 'type.admin']); 显示错误: "message": "Target class [type.adsssmin] does not exist.", "exception": "Illuminate\\Contracts\\Container\\BindingResolutionException", 我尝试了一切,但没有任何效果 我正在尝试复制此https://medium.com/@slamtm608/laravel-sanctum-multi-authentication-504b9489a2cc但它不是 Laravel 11。 我通过这样做修复了它 ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'type.admin' => AdminMiddleware::class, 'type.registrar' => RegistrarMiddleWare::class, ]); })
引导应用程序中间件文件 引导应用程序中间件文件 <?php use App\Http\Middleware\AdminMiddleware; use App\Http\Middleware\RegistrarMiddleWare; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->alias(['type.admin' => AdminMiddleware::class]); $middleware->alias(['type.registrar' => RegistrarMiddleWare::class]); // }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); 中间件文件 <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Symfony\Component\HttpFoundation\Response; class AdminMiddleware { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { if (request()->user()->tokenCan('role:admin')) { return $next($request); } return response()->json('Not Authorized', 401); } } api文件 Route::post('/employee/register', [AuthController::class, 'EmployeeRegister'])->middleware(['auth:sanctum', 'type.admin']); 显示错误: "message": "Target class [type.adsssmin] does not exist.", "exception": "Illuminate\\Contracts\\Container\\BindingResolutionException", 我尝试了一切,但没有任何效果 我正在尝试复制此https://medium.com/@slamtm608/laravel-sanctum-multi-authentication-504b9489a2cc但它不是 laravel 11 我通过这样做修复了它 ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'type.admin' => AdminMiddleware::class, 'type.registrar' => RegistrarMiddleWare::class, ]); })
Laravel 11 - HasMiddleware 的 middleware() 方法与 Illuminate\Routing\Controller 的 middlware() 发生冲突
在扩展 Illuminate\Routing\Controller 的控制器中,我尝试使用新的 HasMiddleware 实现一些中间件验证。 这是我试图运行的代码: 在扩展 Illuminate\Routing\Controller 的控制器中,我尝试使用新的 HasMiddleware 来实现一些中间件验证。 这是我尝试运行的代码: <?php namespace App\Http\Controllers; use Illuminate\Routing\Controller; use Illuminate\Routing\Controllers\HasMiddleware; use Illuminate\Routing\Controllers\Middleware; class BaseController extends Controller implements HasMiddleware { public static $readPermission = null; public static $customPermissionChecks = []; public static function middleware(): array { return array_merge([ 'auth:api', new Middleware('permission:' . self::$readPermission, ['only' => ['index', 'show']]), new Middleware('permission:write.' . self::$readPermission, ['only' => ['edit', 'store', 'update', 'destroy', 'restore']]) ], self::$customPermissionChecks); } } 但是 Illuminate\Routing\Controller 的 middlware() 与 HasMiddleware 的静态方法冲突,导致出现以下错误: Cannot make non static method Illuminate\Routing\Controller::middleware() static in class App\Http\Controllers\BaseController 您扩展了错误的控制器类 使用 App\Http 中的基本控制器 use App\Http\Controllers\Controller; class BaseController extends Controller 而不是你用过的 use Illuminate\Routing\Controller; class BaseController extends Controller
我已经完成了 Laravel 初学者教程,现在我可以理解这些教程中列出的每个主题并创建了我自己的项目,但正如我在其中看到的那样,导师能够...
我有一个 Laravel 11 的 api 项目,我想为管理 api 制作一个中间件。 AdminMiddleware.php(自定义中间件) 我有一个 Laravel 11 的 api 项目,我想为管理 api 制作一个中间件。 AdminMiddleware.php(自定义中间件) <?php namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Symfony\Component\HttpFoundation\Response; class AdminMiddleware { /** * Handle an incoming request. * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { $user = Auth::user(); if (!$user) { return response()->json([ 'status' => 'forbidden', 'message' => 'You need to log in first.' ], 403); } if ($user->authority !== 'admin') { return response()->json([ 'status' => 'forbidden', 'message' => 'You are not an administrator.' ], 403); } return $next($request); } } bootstrap/app.php(新的 dir 中间件配置) <?php use App\Http\Middleware\AdminMiddleware; use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ "is_admin" => AdminMiddleware::class, ]); }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); api.php(api 路由) <?php use App\Http\Controllers\ProductController; use App\Http\Controllers\UserController; use App\Http\Middleware\AdminMiddleware; use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; Route::get('/user', function (Request $request) { return $request->user(); })->middleware('auth:sanctum'); Route::prefix('/v1')->group(function () { Route::prefix('/admin')->group(function () { Route::prefix('/product')->group(function () { Route::get('/', [ProductController::class, "index"]); Route::post('/', [ProductController::class, "store"]); Route::get('/{id}', [ProductController::class, "show"]); Route::put('/{id}', [ProductController::class, "update"]); Route::delete('/{id}', [ProductController::class, "destroy"]); }); Route::prefix('/user')->group(function () { Route::get('/', [UserController::class, "index"]); Route::get('/{id}', [UserController::class, "show"]); Route::post('/{id}', [UserController::class, "store"]); Route::put('/{id}', [UserController::class, "update"]); Route::delete('/{id}', [UserController::class, "destroy"]); }); })->middleware("is_admin"); Route::prefix('/auth')->group(function () { Route::post('/signup', [UserController::class, "signup"]); Route::post('/signin', [UserController::class, "signin"]); Route::post('/signout', [UserController::class, "signout"]); }); Route::prefix('/product')->group(function () { Route::post('/', [ProductController::class, "product"]); }); }); 我刚刚尝试在配置中使用别名和 api 方法。但在 api 方法的情况下,所有 api 路由都受中间件影响。我尝试使用 Route::group(['middleware' => 'is_admin'] 并直接在 api 路由中使用 AdminMiddleware,并使用 middleware(AdminMiddleware::class) 调用该方法。是的,它不是工作。 如果您希望只有admin权限才能通过AdminMiddleware访问这些路由,那么您需要对那些具有null权限的用户再次进行检查。 因为在 PHP 中 null 是一种没有值的数据类型。 如果您的 AdminMiddleware 正确分配给 routes 那么下面的代码将起作用。 尝试一下AdminMiddleware。 public function handle(Request $request, Closure $next): Response { $user = Auth::user(); if (!$user) { return response()->json([ 'status' => 'forbidden', 'message' => 'You need to log in first.' ], 403); } if ((is_null($user->authority) || $user->authority !== 'admin')) { return response()->json([ 'status' => 'forbidden', 'message' => 'You are not an administrator.' ], 403); } return $next($request); } 使用上面的代码就可以了。
我正在尝试验证从另一个域的前端发送的请求 我尝试使用 cookie 值设置“Cookie”标头,但它被浏览器阻止,所以我执行了以下操作 他...
如何在 laravel Rate Limit 中对不同数量的请求应用不同的延迟?
我正在制作一个速率限制中间件,我必须在其中执行以下功能 1:第一个请求是即时发送,第二个请求会要求您等待30秒,第三个请求会要求您等待60秒,...
我在 Laravel 的中间件方面遇到了一些问题。 让我告诉你我想要实现的基本想法: 该网站的注册用户将具有以下四种角色之一: 学生(d...
我正在开发一个 Laravel 10 应用程序,该应用程序带有中间件来检查令牌是否已过期。如果有,它会使用refresh_token生成一个新令牌,创建一个新会话,并更新会话...
我有一个可以打开的存储网址,它看起来像这样 我有一个可以打开的存储网址,它看起来像这样 <a href="{{ Storage::url('invoices/'. $invoice->invoice_number . '.pdf') }}?is_opened={{ $token }}" class="f-fallback button button--blue" target="_blank">View Invoice</a> 预期的操作应该是打开此链接时运行的自定义中间件。每当我单击按钮时,中间件都会被忽略。我已正确设置中间件,因为它在每个页面上运行,没有任何问题。 问题:中间件不影响存储URL吗? 放置在storage/文件夹中的文件是直接调用的,因此访问它们时不会调用中间件。 如果您想在从 storage/ 文件夹下载/访问某些内容时使用中间件,您可以创建一个单独的路由,然后对其应用中间件。