IndominusByte / fastapi-jwt-auth

FastAPI extension that provides JWT Auth support (secure, easy to use, and lightweight)
http://indominusbyte.github.io/fastapi-jwt-auth/
MIT License
630 stars 143 forks source link

Personalization exeption messages #46

Closed MohammadmahdiAhmadi closed 3 years ago

MohammadmahdiAhmadi commented 3 years ago

Hi, how can i personalize exeption messages?

@app.exception_handler(AuthJWTException) def authjwt_exception_handler(request: Request, exc: AuthJWTException): return JSONResponse( status_code=exc.status_code, content={"detail": exc.message} )

AbduazizZiyodov commented 3 years ago

Hi !

JSONResponse(
        status_code=<<status code>>,
        content= <<response msg>>,
    )

Example:

from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse

class UnicornException(Exception):
    def __init__(self, name: str):
        self.name = name

app = FastAPI()

@app.exception_handler(UnicornException)
async def unicorn_exception_handler(request: Request, exc: UnicornException):
    return JSONResponse(
        status_code=418,
        content={"message": f"Oops! {exc.name} did something. There goes a rainbow..."},
    )

@app.get("/unicorns/{name}")
async def read_unicorn(name: str):
    if name == "yolo":
        raise UnicornException(name=name)
    return {"unicorn_name": name}

https://fastapi.tiangolo.com/tutorial/handling-errors/#install-custom-exception-handlers

MohammadmahdiAhmadi commented 3 years ago

Thanks :)

I did something like this This is madness but ...

` @app.exception_handler(AuthJWTException) def authjwt_exception_handler(request: Request, exc: AuthJWTException):

if exc.message == "Token has been revoked":
    exc.message = "My own error message 1"

elif exc.message == "Signature has expired":
    exc.message = "My own error message 2"

elif exc.message == "Missing Authorization Header":
    exc.message = "My own error message 3"

elif exc.message == "Only access tokens are allowed":
    exc.message = "My own error message 4"

elif exc.message == "Only refresh tokens are allowed":
    exc.message = "My own error message 5"

else:
    exc.message = "My own error message 6"

return JSONResponse(
    status_code=exc.status_code,
    content={
        "status": False,
        "message": exc.message
    }
)`
AbduazizZiyodov commented 3 years ago

I want to offer you a better option:

# Your own messages. You can save all messages in here
messages = {
    "Token has been revoked": "My own error message 1",
    "Signature has expired": "My own error message 2",
    "Missing Authorization Header": "My own error message 3",
    "Only access tokens are allowed": "My own error message 4",
    "Only refresh tokens are allowed": "My own error message 5"
}
# this code compares exc.message with your messages.
@app.exception_handler(AuthJWTException)
def auth_jwt_exception_handler(request: Request, exc: AuthJWTException):
    return JSONResponse(
        status_code=exc.status_code,
        content={
            "status": False,
            "message": messages[exc.message]
        }
    )
MohammadmahdiAhmadi commented 3 years ago

I want to offer you a better option:

# Your own messages. You can save all messages in here
messages = {
    "Token has been revoked": "My own error message 1",
    "Signature has expired": "My own error message 2",
    "Missing Authorization Header": "My own error message 3",
    "Only access tokens are allowed": "My own error message 4",
    "Only refresh tokens are allowed": "My own error message 5"
}
# this code compares exc.message with your messages.
@app.exception_handler(AuthJWTException)
def auth_jwt_exception_handler(request: Request, exc: AuthJWTException):
    return JSONResponse(
        status_code=exc.status_code,
        content={
            "status": False,
            "message": messages[exc.message]
        }
    )
MohammadmahdiAhmadi commented 3 years ago

I want to offer you a better option:

# Your own messages. You can save all messages in here
messages = {
    "Token has been revoked": "My own error message 1",
    "Signature has expired": "My own error message 2",
    "Missing Authorization Header": "My own error message 3",
    "Only access tokens are allowed": "My own error message 4",
    "Only refresh tokens are allowed": "My own error message 5"
}
# this code compares exc.message with your messages.
@app.exception_handler(AuthJWTException)
def auth_jwt_exception_handler(request: Request, exc: AuthJWTException):
    return JSONResponse(
        status_code=exc.status_code,
        content={
            "status": False,
            "message": messages[exc.message]
        }
    )
MohammadmahdiAhmadi commented 3 years ago

That's amazing ! Thank you so much :)))