Skip to content

Commit 225c365

Browse files
committed
Fix registration flow.
And default to requiring login for all views. https://django-registration.readthedocs.io/en/stable/changelog.html#version-5-1-0
1 parent b74b568 commit 225c365

File tree

6 files changed

+39
-6
lines changed

6 files changed

+39
-6
lines changed

config/settings.py-tpl

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ MIDDLEWARE = [
7171
"django.middleware.common.CommonMiddleware",
7272
"django.middleware.csrf.CsrfViewMiddleware",
7373
"django.contrib.auth.middleware.AuthenticationMiddleware",
74+
"django.contrib.auth.middleware.LoginRequiredMiddleware",
7475
"django.contrib.messages.middleware.MessageMiddleware",
7576
"django.middleware.clickjacking.XFrameOptionsMiddleware",
7677
"core.middleware.TimezoneMiddleware",

config/urls.py-tpl

+6-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ urlpatterns = [
3232
auth_views.LoginView.as_view(redirect_authenticated_user=True),
3333
name="login",
3434
),
35+
path(
36+
"accounts/register/complete/",
37+
views.registration_complete,
38+
name="django_registration_complete",
39+
),
3540
path(
3641
"accounts/register/",
3742
views.RegistrationView.as_view(
@@ -40,7 +45,7 @@ urlpatterns = [
4045
name="django_registration_register",
4146
),
4247
path(
43-
"accounts/activate/<str:activation_key>/",
48+
"accounts/activate/",
4449
views.ActivationView.as_view(),
4550
name="django_registration_activate",
4651
),

core/views.py-tpl

+14-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ from django.contrib.auth import login
33
from django.conf import settings
44
from django.urls import reverse
55
from django.http import FileResponse
6-
from django.contrib.auth.decorators import login_required
6+
from django.contrib.auth.decorators import login_not_required
77
from django.contrib import messages
88
from django.views.decorators.cache import cache_control
99
from django.views.decorators.http import require_GET
@@ -17,24 +17,26 @@ from .utils import send_email_to_admin
1717
from .models import User
1818

1919

20+
@login_not_required
2021
def placeholder(request):
2122
context = {}
2223
return render(request, "placeholder.html", context)
2324

2425

25-
@login_required
2626
def private_page(request):
2727
context = {}
2828
return render(request, "private.html", context)
2929

3030

3131
@require_GET
32+
@login_not_required
3233
@cache_control(max_age=60 * 60 * 24, immutable=True, public=True) # One day
3334
def favicon(request):
3435
file = (settings.BASE_DIR / "static" / "img" / "seahorse-64x64.png").open("rb")
3536
return FileResponse(file)
3637

3738

39+
@login_not_required
3840
def account_verified(request, user_id):
3941
user = get_object_or_404(User, id=user_id)
4042

@@ -48,14 +50,23 @@ def account_verified(request, user_id):
4850
return redirect("index")
4951

5052

53+
@method_decorator(login_not_required, name="dispatch")
5154
class ActivationView(BaseActivationView):
52-
def get_success_url(self, user):
55+
def get_success_url(self, user=None):
56+
if not User:
57+
return reverse("index")
5358
return reverse("account-verified", args=(user.id,))
5459

5560

61+
@method_decorator(login_not_required, name="dispatch")
5662
@method_decorator(check_honeypot, name="post")
5763
class RegistrationView(BaseRegistrationView):
5864
def get(self, request, *args, **kwargs):
5965
if self.request.user.is_authenticated:
6066
return redirect("index")
6167
return super().get(request, *args, **kwargs)
68+
69+
70+
@login_not_required
71+
def registration_complete(request):
72+
return render(request, "django_registration/registration_complete.html")
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Your're almost done creating your account
22

3-
Follow this link to activate it: {{ scheme }}://{{ site }}{% url 'django_registration_activate' activation_key %}
3+
Follow this link to activate it: {{ scheme }}://{{ site }}{% url 'django_registration_activate' %}?activation_key={{ activation_key }}
44

55
The link expires in {{ expiration_days }} days, so get to it!
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{% extends "base.html" %}
2+
3+
{% block title %}
4+
Complete your account activation
5+
{% endblock title %}
6+
7+
{% block content %}
8+
<h1>Complete your account activation</h1>
9+
10+
<form method="post">
11+
{% csrf_token %}
12+
<input type="hidden"
13+
name="activation_key"
14+
value="{{ request.GET.activation_key }}">
15+
<button type="submit">Activate your account and log in</button>
16+
</form>
17+
{% endblock content %}

templates/django_registration/registration_complete.html

-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
{% extends "base.html" %}
2-
{% load static %}
32

43
{% block title %}
54
Registration submitted

0 commit comments

Comments
 (0)