Ciao a tutti,
Sto usando Python per creare utenti tramite l’API di Discourse. La richiesta di creazione utente restituisce una risposta di successo, ma sto riscontrando un problema in cui l’attributo active nella risposta è sempre false, anche se l’ho esplicitamente impostato su true nel payload. L’attributo confirmed è impostato su true e funziona correttamente.
Ecco il codice:
import csv
import requests
import json
from datetime import datetime
# Dettagli API di Discourse
discourse_url = "https://forum.hobiguru.com/" # Sostituisci con il tuo URL di Discourse
api_key = "your-api-key" # Sostituisci con la tua chiave API di Discourse
api_username = "system" # Nome utente amministratore
# Intestazioni della richiesta
headers = {
"Api-Key": api_key,
"Api-Username": api_username,
"Content-Type": "application/json"
}
# Funzione per creare un utente
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, # Imposta active su True per impostazione predefinita
"confirmed": True, # Imposta confirmed su True per impostazione predefinita
"created_at": join_date_str
}
print(f"\nURL della richiesta: {url}")
print(f"Intestazioni della richiesta: {json.dumps(headers, indent=2)}")
print(f"Payload della richiesta: {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"Creazione utente riuscita: {json.dumps(response_json, indent=2)}")
else:
print(f"Creazione utente fallita. Motivo: {response_json.get('message')}")
print(f"Errori: {json.dumps(response_json.get('errors'), indent=2)}")
else:
print(f"Richiesta fallita: {response.status_code}, {response.text}")
# Lettura degli utenti da un file CSV
with open('input_users.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
# Estrai i dettagli dell'utente dalla riga
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'))
Ottengo questo stampato:
Richiesta di creazione di un utente
{'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 della richiesta: https://forum.hobiguru.com/users.json
Intestazioni della richiesta:
{
"Api-Key": "d9---------------e564d65d9b5a3",
"Api-Username": "system",
"Content-Type": "application/json"
}
Payload della richiesta:
{
"name": "Goran",
"email": "'bla+blaaa@gmail.com",
"password": "P@ssword!23",
"username": "goran12",
"active": true,
"confirmed": true,
"created_at": "2024-11-04T10:20:34Z"
}
Risposta:
Risposta completa: {
"success": true,
"active": false,
"message": "Vaš račun je aktiviran i spreman za korištenje."
}
Richiesta riuscita e utente creato:
{'success': True, 'active': False, 'message': 'Vaš račun je aktiviran i spreman za korištenje.'}
Problema:
- Nonostante l’invio di
"active": Truenel payload, l’attributoactivenella risposta è semprefalsee quando cerco gli utenti nel pannello di amministrazione di Discourse non ne trovo nessuno. - L’API restituisce
success: true, ma l’utente non sembra essere completamente attivato.
Domande:
- C’è qualcosa che potrei trascurare nella mia richiesta che potrebbe causare il mancato corretto impostazione dell’attributo
active? - Ci sono condizioni specifiche nell’API di Discourse che potrebbero sovrascrivere l’attributo
active, anche se è esplicitamente impostato sutrue?
Qualsiasi intuizione o consiglio sarebbe molto apprezzato!

