用户单击帐户激活链接时,他们将被重定向到我的激活视图:
def activate(request, uidb64, token):
try:
uid = force_text(urlsafe_base64_decode(uidb64))
user = CustomUser.objects.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and account_activation_token.check_token(user, token):
user.is_active = True
user.save()
login(request, user)
return redirect('/')
else:
return HttpResponse('Activation link is invalid!')
由于某些原因,当使用redirect('/')
重定向它们时,它们不会自动登录,即在索引模板中,user.is_authenticated
是False
。
如果有人知道为什么会这样,并且可以在单击激活链接后帮助我自动登录用户,我将非常感谢他们的帮助。
谢谢
杰克
我有一个自定义的登录视图,当我用此登录用户时,一切运行正常。令人困惑的是,它使用与激活视图相同的代码来登录用户。
def custom_login(request):
if request.user.is_authenticated:
return redirect('/')
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
if user.is_active:
print(user)
login(request, user)
return redirect('/')
else:
return redirect('/login/')
else:
return redirect('/login/')
else:
form = LoginForm(label_suffix="")
return render(request, 'core/login.html', {'form': form })
我的SETTINGS.py
的相关部分是:
# Specify login url
LOGIN_URL = "/login/"
# Specify login/ logout redirect URLs
LOGIN_REDIRECT_URL = "/"
LOGOUT_REDIRECT_URL = "/"
这是CustomUser
模型:
class CustomUser(AbstractBaseUser):
username = models.CharField(max_length=200, unique=True, verbose_name='Username')
first_name = models.CharField(max_length=200, blank=True, null=True)
last_name = models.CharField(max_length=200, blank=True, null=True)
email = models.EmailField(max_length=255, unique=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
about = models.TextField(max_length=1000, null=True, blank=True)
date_joined = models.DateTimeField(auto_now_add=True)
university = models.ForeignKey(University, on_delete=models.CASCADE, blank=True,
null=True, default=None)
profile_image = models.ImageField(upload_to='profile_images/', blank=True, null=True)
objects = CustomUserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
def __str__(self):
return self.username
def has_perm(self, perm, obj=None):
if self.is_admin:
return True
return False
def has_module_perms(self, app_label):
if self.is_admin:
return True
return False
def num_points(self):
postVotes = self.post_set.aggregate(models.Count('votes'))["votes__count"]
commentVotes = self.comment_set.aggregate(models.Count('votes'))["votes__count"]
if postVotes is None: postVotes = 0
if commentVotes is None: commentVotes = 0
return postVotes + commentVotes
def num_posts(self):
return self.post_set.count()
def num_comments(self):
return self.comment_set.count()
def latest_activities(self):
# nola = number of latest activities
nola = 10
latest_posts = Post.objects.filter(user=self).order_by('-datetime')[:nola]
latest_comments = Comment.objects.filter(user=self).order_by('-datetime')[:nola]
latest_subcomments = Subcomment.objects.filter(user=self).order_by('-datetime')[:nola]
return sorted(chain(latest_posts, latest_comments, latest_subcomments),
key=lambda e: e.datetime, reverse=True)[:nola]
def save(self, *args, **kwargs):
# delete old file when replacing by updating the file
try:
this = CustomUser.objects.get(id=self.id)
if this.profile_image != self.profile_image:
this.profile_image.delete(save=False)
print("deleting_old_image")
except:
# when new photo then we do nothing, normal case
pass
super().save(*args, **kwargs)