首页 > 解决方案 > Slim 4 - 如果身份验证失败,则具有自定义响应的身份验证中间件

问题描述

希望有人可以提供帮助。我有一个使用 firebase 进行身份验证和 firestore 数据库的反应应用程序。我现在需要一个 sql 数据库,并想使用我的 react 应用程序中获取的 firebase JWT 来授权请求​​。

我正在使用 slim 4 并将它发送到我将 JWT 从 react 发送到 Slim、读取它、检查它是一个有效的令牌并检查用户是否在我的 sql 数据库中的地步。

我正在苦苦挣扎的地方是添加中间件,如果用户未经授权,它将发送自定义响应。

如果用户为空,这是显示我的意图的中间件。

如果用户为空,则表示 JWT 无效或解码的 JWT 电子邮件和 user_id 不在数据库中。

class AuthMiddleware
{
    public function __invoke(Request $request, RequestHandler $handler): Response
    {
        $user = validateFirebaseJWT($request);
        if ($user == null) {
            //throw new HttpForbiddenException($request);
            //throw new HttpUnauthorizedException($request, 'ERROR_401_API_KEY_MISSING');
            $response = new Response();
            $response->getBody()->write('Unauthorised Request');
            return $response->withStatus(403);
        }
        return $handler->handle($request);
    }
 }
$app->add(new AuthMiddleware);

我尝试了几个选项,但所有尝试都会导致未捕获的错误。

Uncaught Error: Cannot instantiate interface Psr\Http\Message\ResponseInterface

Uncaught Slim\Exception\HttpForbiddenException: Forbidden.

Uncaught Slim\Exception\HttpUnauthorizedException:

任何帮助将不胜感激。

谢谢

标签: authenticationfirebase-authenticationjwtslim

解决方案


推荐阅读