|
33 | 33 | create_new_session, |
34 | 34 | get_session, |
35 | 35 | refresh_session, |
| 36 | + create_new_session_without_request_response, |
36 | 37 | ) |
37 | 38 | from supertokens_python.recipe.session.framework.django.asyncio import verify_session |
38 | 39 |
|
39 | 40 | import pytest |
40 | | -from tests.utils import clean_st, reset, setup_st, start_st, create_users |
| 41 | +from tests.utils import clean_st, reset, setup_st, start_st, create_users, get_st_init_args |
41 | 42 | from supertokens_python.recipe.dashboard import DashboardRecipe, InputOverrideConfig |
42 | 43 | from supertokens_python.recipe.dashboard.interfaces import RecipeInterface |
43 | 44 | from supertokens_python.framework import BaseRequest |
@@ -111,6 +112,11 @@ async def optional_session(request: HttpRequest): |
111 | 112 | return JsonResponse({"s": session.get_handle()}) |
112 | 113 |
|
113 | 114 |
|
| 115 | +@verify_session() |
| 116 | +async def verify_view(request: HttpRequest): |
| 117 | + session: SessionContainer = request.supertokens # type: ignore |
| 118 | + return JsonResponse({"handle": session.get_handle()}) # type: ignore |
| 119 | + |
114 | 120 | class SupertokensTest(TestCase): |
115 | 121 | def setUp(self): |
116 | 122 | self.factory = RequestFactory() |
@@ -874,6 +880,41 @@ async def test_search_with_provider_google_and_phone_one(self): |
874 | 880 | data_json = json.loads(response.content) |
875 | 881 | self.assertEqual(len(data_json["users"]), 0) |
876 | 882 |
|
| 883 | + async def test_that_verify_session_return_401_if_access_token_is_not_sent_and_middleware_is_not_added(self): |
| 884 | + args = get_st_init_args([session.init(get_token_transfer_method=lambda *_: "header")]) # type: ignore |
| 885 | + args.update({"framework": "django"}) |
| 886 | + init(**args) # type: ignore |
| 887 | + start_st() |
| 888 | + |
| 889 | + # Try with middleware |
| 890 | + request = self.factory.get("/verify") |
| 891 | + response = await middleware(verify_view)(request) |
| 892 | + assert response.status_code == 401 |
| 893 | + assert json.loads(response.content) == {"message": "unauthorised"} |
| 894 | + |
| 895 | + # Try without middleware |
| 896 | + request = self.factory.get("/verify") |
| 897 | + response = await verify_view(request) |
| 898 | + assert response.status_code == 401 |
| 899 | + assert json.loads(response.content) == {"message": "unauthorised"} |
| 900 | + |
| 901 | + # Create a session and get access token |
| 902 | + s = await create_new_session_without_request_response("userId", {}, {}) |
| 903 | + access_token = s.get_access_token() |
| 904 | + headers = {"HTTP_AUTHORIZATION": "Bearer " + access_token} |
| 905 | + |
| 906 | + # Now try with middleware: |
| 907 | + request = self.factory.get("/verify", {}, **headers) |
| 908 | + response = await middleware(verify_view)(request) |
| 909 | + assert response.status_code == 200 |
| 910 | + assert list(json.loads(response.content)) == ["handle"] |
| 911 | + |
| 912 | + # Now try without middleware: |
| 913 | + request = self.factory.get("/verify", **headers) |
| 914 | + response = await verify_view(request) |
| 915 | + assert response.status_code == 200 |
| 916 | + assert list(json.loads(response.content)) == ["handle"] |
| 917 | + |
877 | 918 |
|
878 | 919 | def test_remove_header_works(): |
879 | 920 | response = HttpResponse() |
|
0 commit comments