38 lines
1.4 KiB
Python
Executable File
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
|