Salut à tous,
J’utilise Python pour créer des utilisateurs via l’API Discourse. La requête de création d’utilisateur renvoie une réponse de succès, mais je rencontre un problème où l’attribut active dans la réponse est toujours false, même si je l’ai explicitement défini sur true dans la charge utile. L’attribut confirmed est défini sur true, et cela fonctionne bien.
Voici le code :
import csv
import requests
import json
from datetime import datetime
# Détails de l'API Discourse
discourse_url = "https://forum.hobiguru.com/" # Remplacez par votre URL Discourse
api_key = "your-api-key" # Remplacez par votre clé API Discourse
api_username = "system" # Nom d'utilisateur administrateur
# En-têtes de la requête
headers = {
"Api-Key": api_key,
"Api-Username": api_username,
"Content-Type": "application/json"
}
# Fonction pour créer un utilisateur
def create_user(username, name, email, password, bio, location, confirmed, active, join_date):
url = f"{discourse_url}/users.json"
join_date_str = join_date.strftime('%Y-%m-%dT%H:%M:%SZ')
payload = {
"name": name,
"email": email,
"password": password,
"username": username,
"active": True, # Définir active sur True par défaut
"confirmed": True, # Définir confirmed sur True par défaut
"created_at": join_date_str
}
print(f"\nURL de la requête : {url}")
print(f"En-têtes de la requête : {json.dumps(headers, indent=2)}")
print(f"Charge utile de la requête : {json.dumps(payload, indent=2)}")
response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
response_json = response.json()
if response_json.get("success"):
print(f"Création d'utilisateur réussie : {json.dumps(response_json, indent=2)}")
else:
print(f"Échec de la création d'utilisateur. Raison : {response_json.get('message')}")
print(f"Erreurs : {json.dumps(response_json.get('errors'), indent=2)}")
else:
print(f"Échec de la requête : {response.status_code}, {response.text}")
# Lecture des utilisateurs à partir d'un fichier CSV
with open('input_users.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
# Extraire les détails de l'utilisateur de la ligne
create_user(row['Username'], row['Name'], row['Email'], row['Password'], row['Bio'], row['Location'], row['Confirmed'] == 'TRUE', row['Active'] == 'TRUE', datetime.strptime(row['Join Date'], '%Y-%m-%dT%H:%M:%SZ'))
J’obtiens ceci d’affiché :
Requête pour créer un utilisateur
{'name': 'Goran', 'email': 'bla+blaaa@gmail.com', 'password': 'P@ssword!23', 'username': 'goran12', 'active': True, 'confirmed': True, 'created_at': '2024-11-04T10:20:34Z'}
URL de la requête : https://forum.hobiguru.com/users.json
En-têtes de la requête :
{
"Api-Key": "d9---------------e564d65d9b5a3",
"Api-Username": "system",
"Content-Type": "application/json"
}
Charge utile de la requête :
{
"name": "Goran",
"email": "'bla+blaaa@gmail.com",
"password": "P@ssword!23",
"username": "goran12",
"active": true,
"confirmed": true,
"created_at": "2024-11-04T10:20:34Z"
}
Réponse :
Réponse complète : {
"success": true,
"active": false,
"message": "Va\\u0161 ra\\u010dun je aktiviran i spreman za kori\\u0161tenje."
}
La requête a réussi et l'utilisateur a été créé :
{'success': True, 'active': False, 'message': 'Vaš račun je aktiviran i spreman za korištenje.'}
Problème :
- Malgré le passage de
"active": Truedans la charge utile, l’attributactivedans la réponse est toujoursfalseet lorsque je recherche les utilisateurs dans le panneau d’administration de Discourse, je n’en trouve aucun. - L’API renvoie
success: true, mais l’utilisateur ne semble pas être entièrement activé.
Questions :
- Y a-t-il quelque chose que j’aurais pu manquer dans ma requête qui pourrait causer le mauvais réglage de l’attribut
active? - Existe-t-il des conditions spécifiques dans l’API de Discourse qui pourraient remplacer l’attribut
active, même s’il est explicitement défini surtrue?
Toute idée ou conseil serait grandement apprécié !

