尝试登录时出现以下错误:
{ "message": "目标类 [App\Http\Middleware\JwtMiddleware] 不存在。”, "exception": "Illuminate\Contracts\Container\BindingResolutionException", “文件”:“/home/u476373343/domains/xyz.com/public_html/backend/vendor/laravel/framework/src/Illuminate/Container/Container.php” }
namespace App\Http\Middleware;
use Closure;
use Exception;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;
use Tymon\JWTAuth\Facades\JWTAuth;
class Jwtmiddleware
{
public function handle(Request $request, Closure $next): Response
{
try {
$user = JWTAuth::parseToken()->authenticate();
} catch (Exception $e) {
if ($e instanceof TokenInvalidException) {
return response()->json(['status' => 'Token is Invalid']);
} else {
if ($e instanceof TokenExpiredException) {
return response()->json(['status' => 'Token is Expired']);
} else {
if ($e instanceof JWTException) {
return response()->json(['status' => 'Token could not be parsed']);
} else {
return response()->json(['status' => 'Authorized token not found']);
}
}
}
}
return $next($request);
}
}
api.php
Route::group(['middleware' => ['jwt.verify']], function () {
Route::post('getmenuitem', [MenuTypeController::class, 'getMenuItemData']);
}
内核.php
protected $middlewareAliases = [
'jwt.verify' => \App\Http\Middleware\JwtMiddleware::class,
];
查看您的代码,问题似乎出在类名的大小写敏感性上。在您的
Kernel.php
文件中,您已将中间件注册为 JwtMiddleware
,但实际的类名称是 Jwtmiddleware
。
要解决此问题,您应该在中间件文件中将类
Jwtmiddleware
重命名为 JwtMiddleware
。
namespace App\Http\Middleware;
use Closure;
use Exception;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;
use Tymon\JWTAuth\Facades\JWTAuth;
class JwtMiddleware
{
// ...
}
并确保文件名也是
JwtMiddleware.php
。进行这些更改后,尝试再次运行您的应用程序。