Forbidden (DisallowedHost at /login)和 (CSRF token missing or incorrect.)的问题

DisallowedHost at /login
Invalid HTTP_HOST header: ‘192.168.1.37:8000’. You may need to add ‘192.168.1.37’ to ALLOWED_HOSTS.
Request Method: GET
Request URL: http://192.168.1.37:8000/login
Django Version: 2.2.7
Exception Type: DisallowedHost

出现这个报错的时候,第一个方法是关闭CSRF防护,在setting里注释掉第三行。

MIDDLEWARE = [
‘django.middleware.security.SecurityMiddleware’,
‘django.contrib.sessions.middleware.SessionMiddleware’,
#‘django.middleware.common.CommonMiddleware’,
‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’,
]

然后就会报下面的错:
Forbidden (CSRF token missing or incorrect.)

在form后面加上{% csrf_token %} 就可以了

用户名:<form method="post" action="/login_check"> {% csrf_token %}
<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">

原理:
在渲染页面的时候,会将 {% csrf_token %} 替换成
这个隐藏域;
服务器交给浏览器保存一个名字为csrftoken的cookie信息;
提交表单时,两个值都会发给服务器进行对比,如果一样,csrf验证通过,否则失败。

但是,关闭CSRF是不安全的,还是把setting里的注释取消,将ALLOWED_HOSTS = [’’] 改为
ALLOWED_HOSTS = [’*’]

允许所有的主机,或是将自己电脑的ip地址加入ALLOWED_HOSTS = [’*’]中,这个方法也可以。

发布了35 篇原创文章 · 获赞 0 · 访问量 431

猜你喜欢

转载自blog.csdn.net/mengzh620/article/details/103041616