Skip to content

Commit

Permalink
Fix: Request Missing During Authentication (#89)
Browse files Browse the repository at this point in the history
* fixed authentication with request #88

* revert commented code
  • Loading branch information
eadwinCode committed Aug 21, 2024
1 parent 9c22551 commit fde01a0
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 10 deletions.
16 changes: 9 additions & 7 deletions ninja_jwt/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
schema = SchemaControl(api_settings)


class TokenVerificationController(ControllerBase):
class TokenVerificationController:
auto_import = False

@http_post(
Expand All @@ -38,7 +38,7 @@ def verify_token(self, token: schema.verify_schema):
return token.to_response_schema()


class TokenBlackListController(ControllerBase):
class TokenBlackListController:
auto_import = False

@http_post(
Expand All @@ -51,7 +51,7 @@ def blacklist_token(self, refresh: schema.blacklist_schema):
return refresh.to_response_schema()


class TokenObtainPairController(ControllerBase):
class TokenObtainPairController:
auto_import = False

@http_post(
Expand Down Expand Up @@ -98,15 +98,17 @@ def refresh_token(self, refresh_token: schema.obtain_sliding_refresh_schema):


@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None)
class NinjaJWTDefaultController(TokenVerificationController, TokenObtainPairController):
class NinjaJWTDefaultController(
ControllerBase, TokenVerificationController, TokenObtainPairController
):
"""NinjaJWT Default controller for obtaining and refreshing tokens"""

auto_import = False


@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None)
class NinjaJWTSlidingController(
TokenVerificationController, TokenObtainSlidingController
ControllerBase, TokenVerificationController, TokenObtainSlidingController
):
"""
NinjaJWT Sliding controller for obtaining and refreshing tokens
Expand Down Expand Up @@ -186,7 +188,7 @@ async def refresh_token(self, refresh_token: schema.obtain_sliding_refresh_schem

@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None)
class AsyncNinjaJWTDefaultController(
AsyncTokenVerificationController, AsyncTokenObtainPairController
ControllerBase, AsyncTokenVerificationController, AsyncTokenObtainPairController
):
"""NinjaJWT Async Default controller for obtaining and refreshing tokens"""

Expand All @@ -195,7 +197,7 @@ class AsyncNinjaJWTDefaultController(

@api_controller("/token", permissions=[AllowAny], tags=["token"], auth=None)
class AsyncNinjaJWTSlidingController(
AsyncTokenVerificationController, AsyncTokenObtainSlidingController
ControllerBase, AsyncTokenVerificationController, AsyncTokenObtainSlidingController
):
"""
NinjaJWT Async Sliding controller for obtaining and refreshing tokens
Expand Down
10 changes: 7 additions & 3 deletions ninja_jwt/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from django.conf import settings
from django.contrib.auth import authenticate, get_user_model
from django.contrib.auth.models import AbstractUser, update_last_login
from django.http import HttpRequest
from django.utils.translation import gettext_lazy as _
from ninja import ModelSchema, Schema
from ninja.schema import DjangoGetter
Expand Down Expand Up @@ -52,7 +53,7 @@ def check_user_authentication_rule(self) -> None:
)

@classmethod
def validate_values(cls, values: Dict) -> Dict:
def validate_values(cls, request: HttpRequest, values: Dict) -> Dict:
if user_name_field not in values and "password" not in values:
raise exceptions.ValidationError(
{
Expand All @@ -69,7 +70,7 @@ def validate_values(cls, values: Dict) -> Dict:
if not values.get("password"):
raise exceptions.ValidationError({"password": "password is required"})

_user = authenticate(**values)
_user = authenticate(request, **values)
cls._user = _user

if not (_user is not None and _user.is_active):
Expand Down Expand Up @@ -103,8 +104,11 @@ class Config:
@model_validator(mode="before")
def validate_inputs(cls, values: DjangoGetter) -> DjangoGetter:
input_values = values._obj
request = values._context.get("request")
if isinstance(input_values, dict):
values._obj.update(cls.validate_values(input_values))
values._obj.update(
cls.validate_values(request=request, values=input_values)
)
return values
return values

Expand Down

0 comments on commit fde01a0

Please sign in to comment.