ai_admin/WebAdmin/signals.py
2024-09-20 04:29:09 +00:00

38 lines
1.4 KiB
Python
Executable File

from django.dispatch import receiver
from allauth.account.signals import user_logged_in
from allauth.socialaccount.models import SocialAccount
from .models import User, UserSource
@receiver(user_logged_in)
def user_logged_in_handler(request, user, **kwargs):
print('1111111111111111111111111')
try:
social_account = SocialAccount.objects.get(user=user, provider='google')
print(social_account.extra_data) # 打印 extra_data 内容以进行调试
google_id = social_account.extra_data['sub'] # 使用 'sub' 字段
email = social_account.extra_data['email']
username = social_account.extra_data['name']
try:
custom_user = User.objects.get(google_id=google_id)
except User.DoesNotExist:
custom_user = User.objects.create(
username=username,
email=email,
google_id=google_id,
password_hash='', # Google 登录不需要密码
)
UserSource.objects.create(user=custom_user, source='Google')
# 更新登录次数和最后登录IP
custom_user.login_count += 1
custom_user.last_login_ip = request.META.get('REMOTE_ADDR')
custom_user.save()
# 确保 Django 用户同步
user.username = custom_user.username
user.save()
except SocialAccount.DoesNotExist:
pass