db.py — index users_ka_id créé APRÈS les migrations (base v1 sans colonne ka_id) ; auth.py — échec d'échange de code Google = redirection douce (fin du 500)
2 changed files +6 −2
modified
louka/auth.py
+3 −1
@@ -146,7 +146,9 @@ def google_callback(request: Request, code: str = "", state: str = "", | ||
| 146 | 146 | "grant_type": "authorization_code", |
| 147 | 147 | "redirect_uri": f"{_base_url(request)}/api/auth/google/callback", |
| 148 | 148 | }, timeout=20) |
| 149 | − tok.raise_for_status() | |
| 149 | + if tok.status_code != 200: | |
| 150 | + # code déjà consommé (double rappel), expiré… -> retour doux à l'accueil | |
| 151 | + return RedirectResponse("/?login=erreur") | |
| 150 | 152 | access = tok.json().get("access_token") |
| 151 | 153 | info = requests.get(GOOGLE_USERINFO, timeout=20, |
| 152 | 154 | headers={"Authorization": f"Bearer {access}"}).json() |
modified
louka/db.py
+3 −1
@@ -122,7 +122,6 @@ CREATE TABLE IF NOT EXISTS users ( | ||
| 122 | 122 | created_at REAL, |
| 123 | 123 | last_login REAL |
| 124 | 124 | ); |
| 125 | −CREATE UNIQUE INDEX IF NOT EXISTS users_ka_id ON users(ka_id); | |
| 126 | 125 | |
| 127 | 126 | CREATE TABLE IF NOT EXISTS favorites ( |
| 128 | 127 | user_id INTEGER NOT NULL, |
@@ -179,6 +178,9 @@ def connect() -> sqlite3.Connection: | ||
| 179 | 178 | for col, decl in cols.items(): |
| 180 | 179 | if col not in existing: |
| 181 | 180 | con.execute(f"ALTER TABLE {table} ADD COLUMN {col} {decl}") |
| 181 | + # index sur des colonnes de migration : APRÈS les ALTER TABLE (une base | |
| 182 | + # antérieure n'a pas encore la colonne au moment du CREATE INDEX) | |
| 183 | + con.execute("CREATE UNIQUE INDEX IF NOT EXISTS users_ka_id ON users(ka_id)") | |
| 182 | 184 | con.commit() |
| 183 | 185 | return con |
| 184 | 186 | |
| 185 | 187 | |