DisallowedRedirect(不安全的重定向到带协议的URL)Django

Abh*_*ogi 6 django login

我在登录用户时收到DisallowedRedirect错误两个视图都是

def login(request):
    c={}
    c.update(csrf(request))
    form=LoginForm()
    errors=()
    c['form']=form
    c['errors']=errors
    return render(request,'news/login.html',c)

def auth_view(request):
    username=request.POST.get('username','')
    password=request.POST.get('password','')
    user=auth.authenticate(username=username,password=password)
    if user is not None:
        auth.login(request,user)
        return HttpResponseRedirect('news:home',request)
    else:
        form=LoginForm()
        errors=('Invalid Username or Password',)
        return render(request,'news/login.html', {'form':form,'errors':errors})
Run Code Online (Sandbox Code Playgroud)

don*_*yor 18

代替

return HttpResponseRedirect('news:home',request)
Run Code Online (Sandbox Code Playgroud)

这个:

return HttpResponseRedirect(reverse('news:home'))
Run Code Online (Sandbox Code Playgroud)

要么

return redirect('news:home')
Run Code Online (Sandbox Code Playgroud)

要么

return redirect(reverse('news:home'))
Run Code Online (Sandbox Code Playgroud)

  • 但为什么 django 需要“反向”?(在这个情况下) (4认同)

小智 7

HttpResponseRedirect.allowed_schemes.append('新闻')


And*_*rei 6

除了当前答案之外,如果您想重定向到自定义方案,您还可以使用以下代码:

class CustomSchemeRedirect(HttpResponsePermanentRedirect):
    allowed_schemes = ['tg']


def redirect(request):
    return CustomSchemeRedirect('tg://resolve?domain=durov')
Run Code Online (Sandbox Code Playgroud)