-
-
Notifications
You must be signed in to change notification settings - Fork 111
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sanic-openapi and sanic-jwt #74
Comments
I implement by this code
|
Hi, tried on sanic 20.9.0 with no success. Is it supposed to work also on more recent releases ? |
this was my attempt: def document_auth_bp():
from sanic_jwt.endpoints import RetrieveUserEndpoint, AuthenticateEndpoint, VerifyEndpoint, RefreshEndpoint
inner_me = RetrieveUserEndpoint.get
@doc.summary("returns the user for this JWT Token")
@doc.consumes({'AUTHORIZATION': str}, location='header')
@doc.produces(User)
async def doc_me(self, request, *args, **kwargs):
return await inner_me(self, request, *args, **kwargs)
RetrieveUserEndpoint.get = doc_me
inner_auth = AuthenticateEndpoint.post
@doc.summary("login a user")
@doc.consumes(doc.JsonBody({
"username": doc.String("the username"),
"password": doc.String("the password"),
}), location="body")
@doc.response(401, None, description="invalid credentials")
@doc.response(200, {"access_token": str, "refresh_token": str}, description="the token to use for api interaction")
async def doc_auth(self, request, *args, **kwargs):
return await inner_auth(self, request, *args, **kwargs)
AuthenticateEndpoint.post = doc_auth
inner_verify = VerifyEndpoint.get
@doc.summary("verifies a JWT")
@doc.consumes({'AUTHORIZATION': str}, location='header')
@doc.response(401, None, description="Token is invalid or expired")
@doc.response(200, {"valid": True}, description="Token is valid")
async def doc_verify(self, request, *args, **kwargs):
return await inner_verify(self, request, *args, **kwargs)
VerifyEndpoint.get = doc_verify
inner_refresh = RefreshEndpoint.post
@doc.summary("generates a new access token with the refresh token")
@doc.consumes({'AUTHORIZATION': str}, location='header')
@doc.consumes(doc.JsonBody({
"refresh_token": doc.String("the refresh token"),
}), location="body")
@doc.response(401, None, description="Token is invalid or expired")
@doc.response(200, {"access_token": str}, description="the new access token")
async def doc_refresh(self, request, *args, **kwargs):
return await inner_refresh(self, request, *args, **kwargs)
RefreshEndpoint.post = doc_refresh
document_auth_bp()
jwt = Initialize(
app,
...
) i feel pretty dirty right now, but it works, would love to see a cleaner solution! |
My solution: sanicjwt = Initialize(
app,
...
)
for route in sanicjwt.bp.routes:
view = route.handler.view_class
for http_method in route.methods:
h = getattr(view, http_method.lower(), None)
if h:
name = route.handler.__name__
d = doc.route_specs[h]
if name == "AuthenticateEndpoint":
d.summary = "Authenticate user and get token"
if name == "RetrieveUserEndpoint":
d.summary = "Retrieve current user"
if name == "VerifyEndpoint":
d.summary = "Verify token"
if name == "RefreshEndpoint":
d.summary = "Generate new token using refresh token" Seems a little bit more elegant... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I use sanic-openapi and sanic-jwt
How to set
@doc.consumes
and@doc.produces
for below API's of sanic-jwtThe text was updated successfully, but these errors were encountered: