merge-social-account
星标15
分支2
更新时间2026年1月27日 14:44
Discord認証で重複したアカウントのSocialAccountを既存ユーザーに移動し、不要ユーザーを削除する
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
Discord認証で重複したアカウントのSocialAccountを既存ユーザーに移動し、不要ユーザーを削除する
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | merge-social-account |
| description | Discord認証で重複したアカウントのSocialAccountを既存ユーザーに移動し、不要ユーザーを削除する |
<trigger_conditions>
</trigger_conditions>
docker compose -f docker-compose-production.yaml up -d
AskUserQuestion で以下を確認:
docker compose -f docker-compose-production.yaml exec vrc-ta-hub python manage.py shell -c "
from django.contrib.auth import get_user_model
from allauth.socialaccount.models import SocialAccount
User = get_user_model()
# 移動元ユーザー(IDまたはメールで検索)
source_user = User.objects.get(id=<SOURCE_ID>) # または email='...'
print('=== 移動元ユーザー ===')
print(f'ID: {source_user.id}')
print(f'Username: {source_user.username}')
print(f'Email: {source_user.email}')
print(f'Date Joined: {source_user.date_joined}')
# 移動先ユーザー
target_user = User.objects.get(id=<TARGET_ID>) # または username='...'
print('\n=== 移動先ユーザー ===')
print(f'ID: {target_user.id}')
print(f'Username: {target_user.username}')
print(f'Email: {target_user.email}')
print(f'Date Joined: {target_user.date_joined}')
# SocialAccount情報
print('\n=== SocialAccount ===')
for sa in SocialAccount.objects.filter(user=source_user):
print(f'Provider: {sa.provider}, UID: {sa.uid}, User: {sa.user_id}')
"
以下の内容を表示して確認を取る:
以下の操作を実行してよいですか?
1. SocialAccount(Discord)を ID:XX から ID:YY に移動
2. 移動元ユーザー(ID:XX, username: ...)を削除
[はい] [いいえ]
確認なしに実行しないこと
docker compose -f docker-compose-production.yaml exec vrc-ta-hub python manage.py shell -c "
from django.contrib.auth import get_user_model
from allauth.socialaccount.models import SocialAccount
User = get_user_model()
source_user = User.objects.get(id=<SOURCE_ID>)
target_user = User.objects.get(id=<TARGET_ID>)
# SocialAccountの移動
updated = SocialAccount.objects.filter(user=source_user).update(user=target_user)
print(f'SocialAccount {updated}件を移動しました')
# 移動元ユーザーの削除
username = source_user.username
source_user.delete()
print(f'ユーザー {username} を削除しました')
"
docker compose -f docker-compose-production.yaml exec vrc-ta-hub python manage.py shell -c "
from django.contrib.auth import get_user_model
from allauth.socialaccount.models import SocialAccount
User = get_user_model()
target_user = User.objects.get(id=<TARGET_ID>)
print('=== 移動先ユーザーの現在の状態 ===')
print(f'ID: {target_user.id}')
print(f'Username: {target_user.username}')
print(f'Email: {target_user.email}')
print('\n=== 紐付いたSocialAccount ===')
for sa in SocialAccount.objects.filter(user=target_user):
print(f'Provider: {sa.provider}, UID: {sa.uid}')
"
# 既存のSocialAccountを確認
docker compose -f docker-compose-production.yaml exec vrc-ta-hub python manage.py shell -c "
from allauth.socialaccount.models import SocialAccount
for sa in SocialAccount.objects.filter(user_id=<TARGET_ID>):
print(f'{sa.provider}: {sa.uid}')
"
この場合は移動元のSocialAccountを削除してから移動元ユーザーを削除する。
移動元ユーザーに関連データ(投稿、コメント等)がある場合は、先に確認:
docker compose -f docker-compose-production.yaml exec vrc-ta-hub python manage.py shell -c "
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(id=<SOURCE_ID>)
# 関連オブジェクトを確認
for rel in user._meta.related_objects:
related_name = rel.get_accessor_name()
count = getattr(user, related_name).count() if hasattr(getattr(user, related_name), 'count') else 'N/A'
print(f'{related_name}: {count}')
"