안녕하세요,
Python을 사용하여 Discourse API를 통해 사용자를 생성하고 있습니다. 사용자 생성 요청은 성공 응답을 반환하지만, 페이로드에서 active 속성을 명시적으로 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\u0161 ra\u010dun je aktiviran i spreman za kori\u0161tenje."
}
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속성이 올바르게 설정되지 않도록 할 수 있는 요청에 누락된 부분이 있을까요? -
active속성이 명시적으로true로 설정되어 있더라도 이를 덮어쓸 수 있는 Discourse API의 특정 조건이 있을까요?
어떤 통찰이나 조언도 큰 도움이 될 것입니다!

