0

私のコードでは、現在@login_requiredデコレータを使用しています。私が知っている限り(URLで見ることができる)、これはユーザーが行っていた元のページを保持している次のパラメータを自分のログインビューに渡します。 ユーザーの資格情報を確認した後、私は彼を元のページにリダイレクトしようとしていますが、その方法を理解できません。私はこれが本当に簡単でなければならないと確信していますが、私はかなり長い間それに固執していました。私はキーボードを捨てる前に助けを求めなければなりませんでした。 マイビューのコードは次のように:あなたがログイン成功をチェックした後Django - ログイン成功後にユーザーを "next"パラメータにリダイレクト

from django.contrib.auth import login as auth_login, authenticate 

def login(request): 
form_class = LoginForm 

if request.method == 'POST': 
    form = form_class(data=request.POST) 
    if form.is_valid(): 
     username = request.POST['username'] 
     password = request.POST['password'] 
     user = authenticate(request, username=username, password=password) 
     if user is not None: 
      auth_login(request, user) 
      return redirect(?????????) 
     else: 
      #Error message 
return render(request, 'login.html', {'form':form_class}) 

答えて

4

は、あなただけのような何かをする必要があります。最後に

next_url = request.GET.get('next') 
if next_url: 
    return HttpResponseRedirect(next_url) 
else: 
    return render(request, 'main/main.html') 
+0

、それは働きます!私はそれが何かばかげてやりやすいことを知っていた。どうもありがとう! –

+2

クエリー文字列に渡された古いURLには盲目的にリダイレクトしたくないことに注意してください。これにより、フィッシング攻撃者は基本的に、ログイン後にユーザーを任意のドメインにリダイレクトすることができます。それが懸念される可能性がある場合は、Django自身のauthパッケージに組み込まれている方法が 'next_url'をどのように浄化するかを見直したいかもしれません。 [Django Authソースコード](https://github.com/django/django/blob/master/django/contrib/auth/views.py)の 'get_redirect_url'関数を参照してください。 – jonpa

関連する問題