Fix auto-login: initialize Zerodha OAuth session before credentials
Without first GETting the connect/login URL with the api_key, Zerodha doesn't know which app is logging in and never returns a request_token after TOTP — causing the redirect loop to fail. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
02922adc9a
commit
df137afcbd
@ -181,7 +181,14 @@ def _perform_zerodha_login(
|
|||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
|
||||||
})
|
})
|
||||||
|
|
||||||
# Step 1: Username + password
|
# Step 1: Initialize OAuth session with api_key so Zerodha knows
|
||||||
|
# which app is logging in and returns request_token after TOTP.
|
||||||
|
session.get(
|
||||||
|
f"https://kite.zerodha.com/connect/login?api_key={api_key}&v=3",
|
||||||
|
timeout=15,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Step 2: Username + password
|
||||||
login_resp = session.post(
|
login_resp = session.post(
|
||||||
KITE_LOGIN_ENDPOINT,
|
KITE_LOGIN_ENDPOINT,
|
||||||
data={"user_id": zerodha_login_id, "password": password},
|
data={"user_id": zerodha_login_id, "password": password},
|
||||||
@ -197,7 +204,7 @@ def _perform_zerodha_login(
|
|||||||
|
|
||||||
request_id = login_data["data"]["request_id"]
|
request_id = login_data["data"]["request_id"]
|
||||||
|
|
||||||
# Step 2: TOTP — don't follow redirect automatically
|
# Step 3: TOTP — don't follow redirect automatically
|
||||||
try:
|
try:
|
||||||
import pyotp
|
import pyotp
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -215,7 +222,7 @@ def _perform_zerodha_login(
|
|||||||
allow_redirects=False,
|
allow_redirects=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Step 3: Follow redirects manually to intercept request_token
|
# Step 4: Follow redirects manually to intercept request_token
|
||||||
request_token = None
|
request_token = None
|
||||||
location = twofa_resp.headers.get("Location", "")
|
location = twofa_resp.headers.get("Location", "")
|
||||||
|
|
||||||
@ -236,7 +243,7 @@ def _perform_zerodha_login(
|
|||||||
"Check TOTP secret and credentials."
|
"Check TOTP secret and credentials."
|
||||||
)
|
)
|
||||||
|
|
||||||
# Step 4: Exchange request_token for access_token using existing service
|
# Step 5: Exchange request_token for access_token using existing service
|
||||||
session_data = exchange_request_token(api_key, api_secret, request_token)
|
session_data = exchange_request_token(api_key, api_secret, request_token)
|
||||||
return {
|
return {
|
||||||
"api_key": api_key,
|
"api_key": api_key,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user