Skip to content

Commit 37f9c9a

Browse files
authored
fix: Password Security (#163)
* Using Pydantic SecretStr type to protect password field as suggested in #161 * fixed failing tests
1 parent 9af9b50 commit 37f9c9a

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

ninja_jwt/schema.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from ninja.schema import DjangoGetter
1212
from ninja_extra import service_resolver
1313
from ninja_extra.context import RouteContext
14-
from pydantic import ConfigDict, ValidationInfo, model_validator
14+
from pydantic import ConfigDict, SecretStr, ValidationInfo, model_validator
1515
from pydantic.main import BaseModel
1616

1717
import ninja_jwt.exceptions as exceptions
@@ -126,6 +126,8 @@ def get_token(cls, user: AbstractUser) -> Dict:
126126

127127

128128
class TokenObtainInputSchemaBase(ModelSchema, TokenInputSchemaMixin):
129+
password: SecretStr
130+
129131
class Meta:
130132
# extra = "forbid"
131133
model = get_user_model()
@@ -147,6 +149,9 @@ def post_validate(self, info: ValidationInfo) -> BaseModel:
147149
)
148150

149151
credentials = schema_input.get_values()
152+
password: SecretStr = credentials.pop("password")
153+
if password and isinstance(password, SecretStr):
154+
credentials["password"] = password.get_secret_value()
150155
request = schema_input.get_request()
151156

152157
self.authenticate(request, credentials)

0 commit comments

Comments
 (0)