Added me/profile page and small improvements

This commit is contained in:
ITQ
2024-02-29 22:47:48 +03:00
parent 2ea64e2bcb
commit a8c63e223a
5 changed files with 32 additions and 16 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ urlpatterns = [
# API # API
path("api/ping", include("ping.urls")), path("api/ping", include("ping.urls")),
path("api/countries", include("countries.urls")), path("api/countries", include("countries.urls")),
path("api/auth/", include("users.urls")), path("api/", include("users.urls")),
] ]
if settings.DEBUG: if settings.DEBUG:
+8 -5
View File
@@ -19,11 +19,14 @@ class JWTAuthentication(BaseAuthentication):
) )
user = Profile.objects.get(login=payload["login"]) user = Profile.objects.get(login=payload["login"])
return (user, None)
except Profile.DoesNotExist: except Profile.DoesNotExist:
raise AuthenticationFailed("Invalid token") error = "Invalid token"
raise AuthenticationFailed(error) from None
except jwt.ExpiredSignatureError: except jwt.ExpiredSignatureError:
raise AuthenticationFailed("Token has expired") error = "Token has expired"
raise AuthenticationFailed(error) from None
except jwt.InvalidTokenError: except jwt.InvalidTokenError:
raise AuthenticationFailed("Invalid token") error = "Invalid token"
raise AuthenticationFailed(error) from None
else:
return (user, None)
+3 -3
View File
@@ -34,8 +34,8 @@ class Profile(models.Model):
) )
image = models.URLField(max_length=200, blank=True, null=True) image = models.URLField(max_length=200, blank=True, null=True)
def is_authenticated(self):
return True
def __str__(self): def __str__(self):
return self.login return self.login
def is_authenticated(self):
return True
+4 -4
View File
@@ -4,17 +4,17 @@ import users.views
urlpatterns = [ urlpatterns = [
path( path(
"register", "auth/register",
users.views.RegisterUserApiView.as_view(), users.views.RegisterUserApiView.as_view(),
name="register", name="register",
), ),
path( path(
"sign-in", "auth/sign-in",
users.views.SigninUserApiView.as_view(), users.views.SigninUserApiView.as_view(),
name="sign-in", name="sign-in",
), ),
path( path(
"protected-view", "me/profile",
users.views.ProtectedView.as_view(), users.views.ProfileMeApiView.as_view(),
) )
] ]
+16 -3
View File
@@ -60,7 +60,7 @@ class RegisterUserApiView(APIView):
if not (bool(re.match(password_pattern, password))): if not (bool(re.match(password_pattern, password))):
error = { error = {
"message": "Your password does not meet our requirements" "error": "Your password does not meet our requirements"
} }
return Response( return Response(
error, error,
@@ -125,9 +125,22 @@ class SigninUserApiView(APIView):
return Response({"token": token}) return Response({"token": token})
class ProtectedView(APIView): class ProfileMeApiView(APIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def get(self, request): def get(self, request):
user = request.user user = request.user
return Response({"message": "Authenticated", "user": str(user)})
profile = {
"login": user.login,
"email": user.email,
"countryCode": user.countryCode,
"isPublic": user.isPublic,
}
if user.phone is not None:
profile["phone"] = user.phone
if user.image is not None:
profile["image"] = user.image
return Response(profile)