SSO KA — adopte le ka_id émis par le hub groupe-ka (source de vérité) ; génération locale en secours seulement
1 changed file +13 −1
modified
louka/auth.py
+13 −1
@@ -205,7 +205,19 @@ def ka_callback(request: Request, ka_token: str = "", state: str = ""): | |||||
| 205 | (hub_key, email, name, picture, now, now)) | 205 | (hub_key, email, name, picture, now, now)) | ||
| 206 | uid, role = cur.lastrowid, None | 206 | uid, role = cur.lastrowid, None | ||
| 207 | con.commit() | 207 | con.commit() | ||
| 208 | − _ensure_ka_id(con, uid) | 208 | + # KA ID : créé À LA SOURCE par le hub (groupe-ka.com) et transporté dans | ||
| 209 | + # le jeton — on l'adopte tel quel ; génération locale seulement en secours | ||||
| 210 | + # (vieux jeton sans claim ka_id). | ||||
| 211 | + hub_ka = (claims.get("ka_id") or "").strip() | ||||
| 212 | + if hub_ka: | ||||
| 213 | + import sqlite3 | ||||
| 214 | + try: | ||||
| 215 | + con.execute("UPDATE users SET ka_id=? WHERE id=?", (hub_ka, uid)) | ||||
| 216 | + con.commit() | ||||
| 217 | + except sqlite3.IntegrityError: | ||||
| 218 | + pass # même KA ID déjà porté par une autre ligne locale : on garde | ||||
| 219 | + else: | ||||
| 220 | + _ensure_ka_id(con, uid) | ||||
| 209 | con.close() | 221 | con.close() | ||
| 210 | 222 | ||||
| 211 | session = _sign({ | 223 | session = _sign({ | ||
| 212 | 224 | ||||