Hallo zusammen,
ich verwende Python, um Benutzer über die Discourse-API zu erstellen. Die Anfrage zur Benutzererstellung gibt eine Erfolgsmeldung zurück, aber ich stoße auf ein Problem, bei dem das Attribut active in der Antwort immer false ist, obwohl ich es im Payload explizit auf true gesetzt habe. Das Attribut confirmed ist auf true gesetzt und funktioniert einwandfrei.
Hier ist der Code:
import csv
import requests
import json
from datetime import datetime
# Discourse API-Details
discourse_url = "https://forum.hobiguru.com/" # Ersetzen Sie dies durch Ihre Discourse-URL
api_key = "your-api-key" # Ersetzen Sie dies durch Ihren Discourse API-Schlüssel
api_username = "system" # Admin-Benutzername
# Anforderungsheader
headers = {
"Api-Key": api_key,
"Api-Username": api_username,
"Content-Type": "application/json"
}
# Funktion zum Erstellen eines Benutzers
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, # Setze active standardmäßig auf True
"confirmed": True, # Setze confirmed standardmäßig auf True
"created_at": join_date_str
}
print(f"\nAnforderungs-URL: {url}")
print(f"Anforderungsheader: {json.dumps(headers, indent=2)}")
print(f"Anforderungs-Payload: {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"Benutzererstellung erfolgreich: {json.dumps(response_json, indent=2)}")
else:
print(f"Benutzererstellung fehlgeschlagen. Grund: {response_json.get('message')}")
print(f"Fehler: {json.dumps(response_json.get('errors'), indent=2)}")
else:
print(f"Anfrage fehlgeschlagen: {response.status_code}, {response.text}")
# Lesen von Benutzern aus einer CSV-Datei
with open('input_users.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
# Extrahieren der Benutzerdetails aus der Zeile
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'))
Ich erhalte Folgendes gedruckt:
Anfrage zur Erstellung eines Benutzers
{'name': 'Goran', 'email': 'bla+blaaa@gmail.com', 'password': 'P@ssword!23', 'username': 'goran12', 'active': True, 'confirmed': True, 'created_at': '2024-11-04T10:20:34Z'}
Anforderungs-URL: https://forum.hobiguru.com/users.json
Anforderungsheader:
{
"Api-Key": "d9---------------e564d65d9b5a3",
"Api-Username": "system",
"Content-Type": "application/json"
}
Anforderungs-Payload:
{
"name": "Goran",
"email": "'bla+blaaa@gmail.com",
"password": "P@ssword!23",
"username": "goran12",
"active": true,
"confirmed": true,
"created_at": "2024-11-04T10:20:34Z"
}
Antwort:
Vollständige Antwort: {
"success": true,
"active": false,
"message": "Va\\u0161 ra\\u010dun je aktiviran i spreman za kori\\u0161tenje."
}
Anfrage war erfolgreich und der Benutzer wurde erstellt:
{'success': True, 'active': False, 'message': 'Vaš račun je aktiviran i spreman za korištenje.'}
Problem:
- Trotz Übergabe von
"active": Trueim Payload ist das Attributactivein der Antwort immerfalse, und wenn ich nach den Benutzern im Discourse-Admin-Panel suche, kann ich keine finden. - Die API gibt
success: truezurück, aber der Benutzer scheint nicht vollständig aktiviert zu sein.
Fragen:
- Gibt es etwas, das ich in meiner Anfrage übersehen könnte, das dazu führen könnte, dass das Attribut
activenicht korrekt gesetzt wird? - Gibt es bestimmte Bedingungen in der Discourse-API, die das Attribut
activeüberschreiben würden, auch wenn es explizit auftruegesetzt ist?
Jede Einsicht oder jeder Rat wäre sehr willkommen!

