Remove guest login: every user registers with a phone number

POST /api/auth/session is gone (404). Existing is_guest rows keep refresh and
upgrade-by-phone until the demo/guest rows are purged; the code that serves
them is listed in docs/security-before-production.md §10. Tests that used the
endpoint as a fixture now use accounts/testing.guest_session.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-05 17:38:18 +03:30
parent 03e81abe7e
commit 8835e01595
18 changed files with 101 additions and 198 deletions

View File

@@ -481,7 +481,6 @@ REST_FRAMEWORK = {
# در دیتابیس)؛ این‌ها فقط جلوی یک ماشینِ تنها را می‌گیرند.
'otp_request': os.environ.get('OTP_REQUEST_IP_RATE', '20/hour'),
'otp_login': os.environ.get('OTP_LOGIN_IP_RATE', '30/hour'),
'guest_session': os.environ.get('GUEST_SESSION_IP_RATE', '60/hour'),
'bazaar_verify': '10/hour',
'bazaar_oauth': '20/hour',
'ai_ask': '20/hour',
@@ -537,21 +536,10 @@ SPECTACULAR_SETTINGS = {
'Authorization: Bearer <token>\n'
'```\n'
'\n'
'دو راه برای گرفتنِ توکن هست:\n'
'\n'
'| مسیر | کاربرد |\n'
'|---|---|\n'
'| `POST /api/auth/session` | ورودِ مهمان با `deviceId` — بدونِ شماره، بلافاصله |\n'
'| `POST /api/auth/otp/request` + `POST /api/auth/login` | ورودِ کامل با شماره‌ی موبایل |\n'
'\n'
'کاربرِ مهمان می‌تواند بعداً شماره‌اش را وصل کند و همان حساب را نگه '
'دارد. توکنِ دسترسی یک ساعت اعتبار دارد؛ با `POST /api/auth/refresh` '
'تازه‌اش کنید.\n'
'\n'
'`deviceId` هر رشته‌ای می‌تواند باشد و هر مقدارِ تازه یک حسابِ جدا '
'می‌سازد، پس برای تست لازم نیست منتظرِ چیزی بمانید. چند `deviceId` '
'از پیش‌آماده هم برای دیدنِ صفحه‌های داده‌دار وجود دارد — از تیمِ '
'بک‌اند بخواهید.\n'
'توکن را فقط با شماره‌ی موبایل می‌گیرید: `POST /api/auth/otp/request` '
'و بعد `POST /api/auth/login`. ورودِ مهمان نداریم؛ هر کاربر حداقل ثبت‌نامِ '
'اولیه با شماره دارد. توکنِ دسترسی یک ساعت اعتبار دارد؛ با '
'`POST /api/auth/refresh` تازه‌اش کنید.\n'
'\n'
'**در همین صفحه:** روی **Authorize** بزنید و *فقط خودِ توکن* را وارد '
'کنید — کلمه‌ی `Bearer` را Swagger خودش اضافه می‌کند.\n'

View File

@@ -202,18 +202,18 @@ class APIRequestLoggingMiddlewareTests(TestCase):
def test_anonymous_api_request_is_logged_with_null_user_id(self):
with self.assertLogs('config.middleware', level='INFO') as captured:
response = self.client.post(
'/api/auth/session',
{'type': 'guest', 'deviceId': 'device-mw-log-anon-1'},
'/api/auth/refresh',
{'refreshToken': 'not-a-real-token'},
format='json',
)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.status_code, 401)
self.assertEqual(len(captured.records), 1)
message = captured.records[0].getMessage()
self.assertIn('method=POST', message)
self.assertIn('path=/api/auth/session', message)
self.assertIn('status=200', message)
self.assertIn('path=/api/auth/refresh', message)
self.assertIn('status=401', message)
self.assertIn('user_id=None', message)
def test_non_api_request_is_not_logged(self):