皆さん、こんにちは。
Discourse API を使用して Python でユーザーを作成しています。ユーザー作成リクエストは成功応答を返しますが、ペイロードで明示的に true に設定しているにもかかわらず、応答の active 属性が常に false になるという問題が発生しています。confirmed 属性は true に設定されており、これは正常に機能しています。
以下にコードを示します。
import csv
import requests
import json
from datetime import datetime
# Discourse API の詳細
discourse_url = "https://forum.hobiguru.com/" # Discourse の URL に置き換えてください
api_key = "your-api-key" # Discourse API キーに置き換えてください
api_username = "system" # 管理者ユーザー名
# リクエストヘッダー
headers = {
"Api-Key": api_key,
"Api-Username": api_username,
"Content-Type": "application/json"
}
# ユーザーを作成する関数
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, # デフォルトで active を True に設定
"confirmed": True, # デフォルトで confirmed を True に設定
"created_at": join_date_str
}
print(f"\nRequest URL: {url}")
print(f"Request Headers: {json.dumps(headers, indent=2)}")
print(f"Request 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"User creation successful: {json.dumps(response_json, indent=2)}")
else:
print(f"User creation failed. Reason: {response_json.get('message')}")
print(f"Errors: {json.dumps(response_json.get('errors'), indent=2)}")
else:
print(f"Request failed: {response.status_code}, {response.text}")
# CSV ファイルからユーザーを読み込む
with open('input_users.csv', mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file)
for row in reader:
# 行からユーザー詳細を抽出
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'))
以下が出力されます。
Request to create a user
{'name': 'Goran', 'email': 'bla+blaaa@gmail.com', 'password': 'P@ssword!23', 'username': 'goran12', 'active': True, 'confirmed': True, 'created_at': '2024-11-04T10:20:34Z'}
Request URL: https://forum.hobiguru.com/users.json
Request Headers:
{
"Api-Key": "d9---------------e564d65d9b5a3",
"Api-Username": "system",
"Content-Type": "application/json"
}
Request 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"
}
Response:
Full Response: {
"success": true,
"active": false,
"message": "Vaš račun je aktiviran i spreman za korištenje."
}
Request was successful and user got created:
{'success': True, 'active': False, 'message': 'Vaš račun je aktiviran i spreman za korištenje.'}
問題点:
- ペイロードに
"active": Trueを渡しているにもかかわらず、応答のactive属性が常に false になり、Discourse の管理パネルでユーザーを見つけることができません。 - API は
success: trueを返しますが、ユーザーは完全にアクティブ化されていないようです。
質問:
active属性が正しく設定されない原因となる、リクエストで私が何か見落としていることはありますか?- Discourse API には、明示的に true に設定されている場合でも
active属性を上書きする可能性のある特定の条件はありますか?
何か洞察やアドバイスがあれば幸いです!

