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

时间:2015-12-25 19:12:58

标签: 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})

4 个答案:

答案 0 :(得分:14)

而不是

return HttpResponseRedirect('news:home',request)

这个:

return HttpResponseRedirect(reverse('news:home'))

return redirect('news:home')

return redirect(reverse('news:home'))

答案 1 :(得分:1)

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

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


def redirect(request):
    return CustomSchemeRedirect('tg://resolve?domain=durov')

答案 2 :(得分:0)

确保在出现此错误时,您在网址前面提供了正确的方案。默认情况下,django.http.HttpResponseRedirect不允许重定向到不以以下方案之一开头的网址:

  • HTTP
  • HTTPS
  • FTP

因此,如果您提供的网址是localhost:8000,请确保将其更改为http://localhost:8000以使其生效。

答案 3 :(得分:0)

HttpResponseRedirect.allowed_schemes.append('news')