Rediriger après la connexion avec Django

voix
1

J'ai un ensemble connexion page comme page d'accueil, localhost / monsite. Je peux connecter et être redirigé avec succès à localhost / monsite / mainpage.

Le problème est que je peux contourner la connexion simplement en entrant simplement le chemin dans l'URL, par exemple; Naviguer à la page d'accueil où la connexion forme est, puis-je ajouter / mainpage à localhost / monsite / qui avec succès des charges localhost / monsite / mainpage.

Comme vous pouvez l'imaginer, ce n'est pas grande. Est-ce que quelqu'un sait ce que je fait de mal ici?

Mon avis

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

mon urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^mainpage/$', views.main),
]
Créé 14/02/2020 à 00:03
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Vous pouvez utiliser le @login_requireddécorateur [Django-doc] sur votre mainvue. Ceci permet de rediriger le jeu de chemin par le LOGIN_URLparamètre [Django-doc] pour vous connecter à l'utilisateur:

# app/views.py

from django.contrib.auth.decorators import login_required

def index(request):
    # …

@login_required
def main(request):
    # …

et dans le settings.py:

# settings.py

# …
LOGIN_URL = 'index'
# …

EDIT : Vous pouvez omettre le ?next=paramètre de requête, en définissant le redirect_field_name=…paramètre None:

@login_required(redirect_field_name=None)
def main(request):
    # …
Créé 14/02/2020 à 00:08
source utilisateur

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