Omdirigere etter innlogging med Django

stemmer
1

Jeg har en login-side sett som min hjemmeside, localhost / mysite. Jeg kan logge inn og hell bli omdirigert til localhost / mysite / hovedsiden.

Problemet er at jeg kan omgå påloggings rett og slett ved å bare skrive inn banen i nettadressen, for eksempel; Jeg navigere til hjemmesiden der login-formen er, så jeg bare legge / hovedsiden til localhost / mysite / som vellykket laster localhost / mysite / hovedsiden.

Som du kan forestille deg, dette er ikke bra. Vet noen hva jeg gjorde galt her?

Mitt syn

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})

min urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^mainpage/$', views.main),
]
Publisert på 14/02/2020 klokken 00:03
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Du kan bruke @login_requireddekoratør [Django-doc]mainvisningen. Dette vil omdirigere til banen sett ved LOGIN_URLinnstillingen [Django-doc] for å logge inn i bruks:

# app/views.py

from django.contrib.auth.decorators import login_required

def index(request):
    # …

@login_required
def main(request):
    # …

og i settings.py:

# settings.py

# …
LOGIN_URL = 'index'
# …

EDIT : Du kan utelate ?next=søkeparameteret, ved å sette redirect_field_name=…parameter for å None:

@login_required(redirect_field_name=None)
def main(request):
    # …
Svarte 14/02/2020 kl. 00:08
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more