From cb6172b4a4615b93c7a5814f127d0249ff4b2751 Mon Sep 17 00:00:00 2001 From: liangliangyy Date: Tue, 17 Sep 2019 15:02:16 +0800 Subject: [PATCH] close #322 --- oauth/models.py | 2 +- oauth/views.py | 65 ++++++++++++++++++++++++++----------------------- 2 files changed, 35 insertions(+), 32 deletions(-) diff --git a/oauth/models.py b/oauth/models.py index 63b3c06..66594bb 100644 --- a/oauth/models.py +++ b/oauth/models.py @@ -16,7 +16,7 @@ class OAuthUser(models.Model): picture = models.CharField(max_length=350, blank=True, null=True) type = models.CharField(blank=False, null=False, max_length=50) email = models.CharField(max_length=50, null=True, blank=True) - matedata = models.CharField(max_length=3000, null=True, blank=True) + matedata = models.TextField(null=True, blank=True) created_time = models.DateTimeField('创建时间', default=now) last_mod_time = models.DateTimeField('修改时间', default=now) diff --git a/oauth/views.py b/oauth/views.py index e784a12..720cd29 100644 --- a/oauth/views.py +++ b/oauth/views.py @@ -12,6 +12,7 @@ from django.shortcuts import get_object_or_404 from django.views.generic import FormView, RedirectView from oauth.forms import RequireEmailForm from django.urls import reverse +from django.db import transaction from DjangoBlog.utils import send_email, get_md5, save_user_avatar from DjangoBlog.utils import get_current_site from django.core.exceptions import ObjectDoesNotExist @@ -86,25 +87,26 @@ def authorize(request): if type == 'facebook': user.token = '' if user.email: - author = None - try: - author = get_user_model().objects.get(id=user.author_id) - except ObjectDoesNotExist: - pass - if not author: - result = get_user_model().objects.get_or_create(email=user.email) - author = result[0] - if result[1]: - author.username = user.nikename - author.source = 'authorize' - author.save() - - user.author = author - user.save() - - oauth_user_login_signal.send(sender=authorize.__class__, id=user.id) - login(request, author) - return HttpResponseRedirect(nexturl) + with transaction.atomic(): + author = None + try: + author = get_user_model().objects.get(id=user.author_id) + except ObjectDoesNotExist: + pass + if not author: + result = get_user_model().objects.get_or_create(email=user.email) + author = result[0] + if result[1]: + author.username = user.nikename + author.source = 'authorize' + author.save() + + user.author = author + user.save() + + oauth_user_login_signal.send(sender=authorize.__class__, id=user.id) + login(request, author) + return HttpResponseRedirect(nexturl) else: user.save() url = reverse('oauth:require_email', kwargs={ @@ -122,18 +124,19 @@ def emailconfirm(request, id, sign): if not get_md5(settings.SECRET_KEY + str(id) + settings.SECRET_KEY).upper() == sign.upper(): return HttpResponseForbidden() oauthuser = get_object_or_404(OAuthUser, pk=id) - if oauthuser.author: - author = get_user_model().objects.get(pk=oauthuser.author_id) - else: - result = get_user_model().objects.get_or_create(email=oauthuser.email) - author = result[0] - if result[1]: - author.source = 'emailconfirm' - author.username = oauthuser.nikename.strip() if oauthuser.nikename.strip() else "djangoblog" + datetime.datetime.now().strftime( - '%y%m%d%I%M%S') - author.save() - oauthuser.author = author - oauthuser.save() + with transaction.atomic(): + if oauthuser.author: + author = get_user_model().objects.get(pk=oauthuser.author_id) + else: + result = get_user_model().objects.get_or_create(email=oauthuser.email) + author = result[0] + if result[1]: + author.source = 'emailconfirm' + author.username = oauthuser.nikename.strip() if oauthuser.nikename.strip() else "djangoblog" + datetime.datetime.now().strftime( + '%y%m%d%I%M%S') + author.save() + oauthuser.author = author + oauthuser.save() oauth_user_login_signal.send(sender=emailconfirm.__class__, id=oauthuser.id) login(request, author)