Перенаправление после входа в систему с Django - PullRequest
1 голос
/ 14 февраля 2020

У меня есть страница входа в систему в качестве домашней страницы, localhost / mysite. Я могу войти в систему и успешно перенаправиться на localhost / mysite / mainpage.

Проблема в том, что я могу обойти вход, просто введя путь в URL, например; Я перехожу на домашнюю страницу, где находится форма входа, затем просто добавляю / mainpage к localhost / mysite /, которая успешно загружает localhost / mysite / mainpage.

Как вы могли догадаться, это не так уж и хорошо. Кто-нибудь знает, что я тут не так сделал?

Мой взгляд

def index(request):
    if request.method == "POST":
        form = AuthenticationForm(request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                messages.info(request, "OK")
                return redirect('/mysite/mainpage')
            else:
                messages.error(request, "NOT OK")

    form = AuthenticationForm()
    return render(request, 'mysite/login.html', {"form":form})

Мой urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^mainpage/$', views.main),
]

1 Ответ

1 голос
/ 14 февраля 2020

Вы можете использовать @login_required декоратор [Django -doc] на вашем main представлении. Это перенаправит на путь, заданный параметром LOGIN_URL [Django -doc] для входа в систему пользователя:

# app/views.py

from django.contrib.auth.decorators import login_required

def index(request):
    # …

<b>@login_required</b>
def main(request):
    # &hellip;

и в settings.py:

# settings.py

# &hellip;
LOGIN_URL = 'index'
# &hellip;

РЕДАКТИРОВАТЬ : Вы можете опустить параметр запроса ?next=, установив для параметра redirect_field_name=&hellip; значение None:

@login_required(<b>redirect_field_name=None</b>)
def main(request):
    # &hellip;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...