74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Debug login issue - check Redis.
|
|
"""
|
|
|
|
import re
|
|
|
|
import httpx
|
|
|
|
BASE_URL = "http://localhost:8000"
|
|
|
|
|
|
def main():
|
|
print("Debugging login issue - detailed...")
|
|
|
|
with httpx.Client(base_url=BASE_URL, timeout=30.0) as client:
|
|
# Get login page
|
|
response = client.get("/admin/login")
|
|
print(f"Login page status: {response.status_code}")
|
|
|
|
# Extract CSRF token
|
|
match = re.search(r'name="csrf_token" value="([^"]+)"', response.text)
|
|
csrf_token = match.group(1) if match else ""
|
|
print(f"CSRF token: {csrf_token}")
|
|
|
|
# Print ALL cookies
|
|
print(f"\nCookies before login: {dict(client.cookies)}")
|
|
|
|
# Submit login
|
|
response = client.post(
|
|
"/admin/login",
|
|
data={
|
|
"username": "admin",
|
|
"password": "admin123",
|
|
"csrf_token": csrf_token,
|
|
},
|
|
follow_redirects=False, # Don't follow redirect to see the response
|
|
)
|
|
|
|
print(f"\nLogin response status: {response.status_code}")
|
|
print(f"Login response headers: {dict(response.headers)}")
|
|
print(f"Cookies after login: {dict(client.cookies)}")
|
|
|
|
# Check if response has any content
|
|
print(f"\nLogin response content (first 1000 chars):")
|
|
print(response.text[:1000])
|
|
|
|
# Now try with a redirect follow
|
|
print("\n\n=== Trying with redirect follow ===")
|
|
client2 = httpx.Client(base_url=BASE_URL, timeout=30.0)
|
|
|
|
response = client2.get("/admin/login")
|
|
match = re.search(r'name="csrf_token" value="([^"]+)"', response.text)
|
|
csrf_token = match.group(1) if match else ""
|
|
|
|
response = client2.post(
|
|
"/admin/login",
|
|
data={
|
|
"username": "admin",
|
|
"password": "admin123",
|
|
"csrf_token": csrf_token,
|
|
},
|
|
follow_redirects=True,
|
|
)
|
|
|
|
print(f"Final status after redirect: {response.status_code}")
|
|
print(f"Final URL: {response.url}")
|
|
print(f"Final cookies: {dict(client2.cookies)}")
|
|
print(f"Final content (first 500 chars): {response.text[:500]}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|