laravel-middleware 相关问题

HTTPl Middleware是一种用于过滤通过您的应用程序的HTTP请求的机制。中间件允许您在业务逻辑周围添加其他层。

Laravel 11 中间件路由组 api 不起作用

我有一个 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); } 使用上面的代码就可以了。

回答 1 投票 0

使用 laravel 11 cookie 手动验证请求

我正在尝试验证从另一个域的前端发送的请求 我尝试使用 cookie 值设置“Cookie”标头,但它被浏览器阻止,所以我执行了以下操作 他...

回答 1 投票 0

如何在 laravel Rate Limit 中对不同数量的请求应用不同的延迟?

我正在制作一个速率限制中间件,我必须在其中执行以下功能 1:第一个请求是即时发送,第二个请求会要求您等待30秒,第三个请求会要求您等待60秒,...

回答 1 投票 0

具有多种角色的Laravel中间件

我在 Laravel 的中间件方面遇到了一些问题。 让我告诉你我想要实现的基本想法: 该网站的注册用户将具有以下四种角色之一: 学生(d...

回答 4 投票 0

Laravel 10:中间件中的会话重新生成不更新值

我正在开发一个 Laravel 10 应用程序,该应用程序带有中间件来检查令牌是否已过期。如果有,它会使用refresh_token生成一个新令牌,创建一个新会话,并更新会话...

回答 1 投票 0

Laravel 11 存储 URL 不触发中间件

我有一个可以打开的存储网址,它看起来像这样 我有一个可以打开的存储网址,它看起来像这样 <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/ 文件夹下载/访问某些内容时使用中间件,您可以创建一个单独的路由,然后对其应用中间件。

回答 1 投票 0

Laravel verifyCsrfToken 接受带有通配符的 URL?

我尝试构建自己的 API。我开始所以目前我唯一的模型将是“用户”。以下是我调用 API 的方式: HTTP/POST http://example.com/api/user/ # 获取所有...

回答 2 投票 0

Laravel 11 - 禁用路由的 CSRF

我有一个路由作为 Webhook 端点,由远程服务调用,但该服务对 Webhook 的调用总是失败。 经过一番检查服务日志后,我

回答 1 投票 0

Laravel 11 与 MongoDB:Guards 无法在中间件中工作

我尝试使用管理员防护,但它在 Laravel 11 的中间件中不起作用。我已将 MongoDB 与 Laravel 11 连接起来以管理其数据库。 我的管理员登录功能如下所示

回答 1 投票 0

在 Laravel 中使用中间件获取权限

此代码在 Laravel 中用作中间件,只允许具有特定权限的用户执行某些操作,并且它正在工作,但我真的不明白它是如何工作的? 有人可以吗

回答 1 投票 0

如何从 Laravel 中间件返回 404 状态和视图

我正在使用样板 Breeze 路由和模板(目前)为 Laravel 10 应用程序构建一个管理部分,并且我有一组前缀路由,我想在下面的内容中返回 404 错误...

回答 1 投票 0

在 laravel 9 或 10 php 中向中间件响应添加自定义数据

我想实现一个用户跟踪系统,经过搜索我意识到我必须在中间件中做到这一点。我遇到的问题是我只能将值添加到 ans 中的响应标头...

回答 1 投票 0

向中间件响应添加自定义数据

我想实现一个用户跟踪系统,经过搜索我意识到我必须在中间件中做到这一点。我遇到的问题是我只能将值添加到 ans 中的响应标头...

回答 1 投票 0

Laravel JsonResource 外部表为空

我是 Laravel 和惰性的初学者。 我使用 Laravel 10 和 Inertia 并做出反应。 当我进入索引页面时,字段“$this->typeEducation->title”已被填充,但是当我单击ed时...

回答 1 投票 0

如何在laravel中读取URL参数

我是初学者,正在尝试创建一个推荐系统。以下是示例网址 http://dev.lea.com/register?ref=mh2HPLpVSn 我尝试获取推荐字符串。我怎样才能单独获得?是否需要

回答 5 投票 0

laravel:如何绕过

在我的 Laravel 项目中 这两个查询正在关于我的路线中间件的任何地方执行,我需要在某些路线上跳过它们,我该怎么做 我尝试过创建“withoutThrottle&qu...

回答 1 投票 0

如何在 Laravel 5 中从请求中检索 url 参数?

我想在中间件中使用模型执行某些操作。这是我想要实现的目标的示例: 公共函数句柄($request, 闭包$next) { $itemId = $request->param(...

回答 4 投票 0

目标类[Spatie\Permission\Middleware\PermissionMiddleware]不存在

如何修复目标类 [Spatie\Permission\Middleware\PermissionMiddleware] 不存在。 我希望代码能再次顺利运行,请帮助我,我已经尝试更改代码但仍然不行...

回答 1 投票 0


本地化检查期间重复中间件

我设置了一些自定义中间件,可以根据某些优先级设置本地化。中间件按预期工作......但我无法让它停止!我尝试加入一些逻辑......

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.