laravel - 自定义中间件在控制器中不起作用(Laravel)
问题描述
我做了一个自定义中间件来处理 auth api 令牌,我在控制器中调用了这个中间件,但它不起作用我在中间件中添加了 dd('') 以查看它是否显示任何内容但它没有工作。
我的中间件是:
<?php
namespace App\Http\Middleware;
use Closure;
use App\ApiUser;
class ApiAuth
{
/**
* Run the request filter.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $var)
{
dd('If I put this dd it does not display anything');
$api_user_count = ApiAuth::where('api_token', $var)->count();
if($api_user_count == 0)
{
abort(403, "Auth failed")
}
return $next($request)
}
}
我的控制器是,您如何看到我正在向中间件发送参数:
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->middleware('apiauth:'.$request->api_token);
$transaction = new Transaction;
$transaction->folio = $request->folio;
$transaction->dte_code = $request->dte_code;
$transaction->cashier = $request->cashier;
$transaction->amount = $request->amount;
if($transaction->save())
{
return response()->json('Ok', 201);
}
else
{
return response()->json('Error', 400);
}
}
我把中间件放在路径 App\Http\Middleware\ApiAuth.php
我将中间件放在 kernel.php 中,如下所示:
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'apiauth' => \App\Http\Middleware\ApiAuth::class, // THIS IS THE MINE
];
奇怪的是它没有显示任何错误,就像它不存在一样,所以我想知道这有什么问题?
谢谢!
解决方案
而不是从您的控制器方法手动调用中间件,您可以注册中间件以仅适用于该一种方法
public function __construct()
{
$this->middleware('apiauth')->only(['store']);
}
然后你可以api_token
从$request
$api_user_count = ApiAuth::where('api_token', $request-> api_token)->get()->count();
推荐阅读
- android - 如何在 Uri 中设置图像
- mongodb - 将对象附加到嵌套对象内的数组中
- r - 如何按 R 中的区域对 DF 内的 ID 求和?
- android - curl:(60)SSL证书问题:证书链中的自签名证书更多详细信息:https://curl.se/docs/sslcerts.html
- python - 如何在 Pandas 中执行虚拟函数以及聚合其他列的总和?
- javascript - 如何使用 mocha 和 mongodb-memory-server 设置单元测试?
- java - 在android的登录屏幕片段中隐藏操作栏
- u-boot - 加载 .bin 文件时,“tftp”和“fatload”有什么区别?
- reactjs - 脉轮 ui 中的响应式网格
- javascript - 如何在烧瓶中失败的发布请求中保持用户输入表单