0

i'm trying to add new value user argument in my request middleware authentication with typescript but, i can't because i used typescript : req:express.Request.

I had tested every topic in this link : enter link description here

All action was bad.

This is my middlewar auth code : This is my problem : request.user = user and i get

TSError: ⨯ Unable to compile TypeScript:
middlewares/isLoggedIn.ts:72:29 - error TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.

72                     request.user = user;
                               ~~~~

My middleware code :

export const isLoggedInMiddleware = (request:express.Request, response:express.Response, next:express.NextFunction) => {

    
    const token:string|undefined = request.headers.authorization;

    if( !token ){

        Logger.error(`Pas de token !`);
        return response.status(HttpStatusCode.UNAUTHORISED).json({
            
            error: ` Vous n'êtes pas autorisez à accéder à cette resource !`
        });
    }

    const RSA_KEY_PRIVATE:string|undefined = process.env.RSA_KEY_PRIVATE;

    if( !RSA_KEY_PRIVATE ){
            
        throw new APIError(
            'INTERNAL SERVER',
            HttpStatusCode.INTERNAL_SERVER,
            `La key public n'existe pas`,
            true
        );
    }

    jsonwebtoken.verify(token, RSA_KEY_PRIVATE.replace('/\\n/g', '\n'), (error, decoded) => {

        if(error) {
            
            Logger.error("Token invalid")
            return response.status(HttpStatusCode.UNAUTHORISED).json({
                
                error: 'Token invalid'
            });
        }

        const sub:any= decoded?.sub;

        try {
            
            userService.getUserById(sub).then( (user:User|null) => {
                
                if(user){

                    request.user = user;
                } else {

                    Logger.error("Le user n existe pas");
                    response.status(HttpStatusCode.UNAUTHORISED).json({

                        error: 'Vous n\'etes pas autorisé'
                    });
                }

            })
        } catch (error) {
            
            Logger.error("Une erreur rencontré lors de la récuperation du user");
            return response.status(HttpStatusCode.UNAUTHORISED).json({
                'error':error
            });
        }
    });

    next();
}   
Sodiki
  • 109
  • 11

1 Answers1

1

You can set your request type as

express.Request & {user?: User}

in your types definition, and then use it in your middleware