gpt4 book ai didi

python - Django 管理员身份验证失败

转载 作者:行者123 更新时间:2023-11-30 23:59:41 25 4
gpt4 key购买 nike

首先按下“登录”按钮时登录 django admin 失败时间,但再次按“返回”和“登录”-使用户登录成功。

我在这里使用 zc.buildout 部署 Django 应用程序,设置类似此处描述的内容 http://www.meppum.com/2009/jan/17/installing-django-ubuntu-intrepid/ 。Nginx(监听 127.0.0.1:8003)运行于 Apache 之外(监听在 127.0.0.1:8001 上),两台服务器的配置均在帖子结束。我正在通过 127.0.0.1:8003/访问我的 django 应用程序。

因此,127.0.0.1:8003/admin/打开 django 管理员登录表单。1)输入用户名/密码,按“登录”重定向到(出于某种未知原因?)127.0.0.1/admin,因此最终什么也没有,因为没有服务器监听在 80 端口上。HTTP 跟踪(点击登录后: http://127.0.0.1:8003/admin/ )

POST /admin/ HTTP/1.1
Host: 127.0.0.1:8003
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.17) Gecko/2010010604 Ubuntu/9.04 (jaunty) Firefox/3.0.17
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:8003/admin/
Cookie: JSESSIONID=0D287C17FBA82223AB7D5884EA534967; sessionid=c65c7af8ebde9e6bdf9c739a731d376b
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
username=to&password=password&this_is_the_login_form=1

HTTP/1.x 302 FOUND
Server: nginx/0.8.29
Date: Mon, 01 Feb 2010 10:27:44 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Expires: Mon, 01 Feb 2010 10:27:44 GMT
Vary: Cookie
Etag: "d41d8cd98f00b204e9800998ecf8427e"
Cache-Control: max-age=0
Set-Cookie: sessionid=9db437da69c359136786696f90ba89f2; expires=Mon, 15-Feb-2010 10:27:44 GMT; Max-Age=1209600; Path=/
Last-Modified: Mon, 01 Feb 2010 10:27:44 GMT
Location: http://127.0.0.1/admin/
Content-Length: 0

2) 按浏览器的后退键,然后再次按“登录”按钮(或按浏览器的“后退”和“刷新”)成功登录。 HTTP 跟踪:

POST /admin/ HTTP/1.1
Host: 127.0.0.1:8003
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.17) Gecko/2010010604 Ubuntu/9.04 (jaunty) Firefox/3.0.17
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:8003/admin/
Cookie: JSESSIONID=0D287C17FBA82223AB7D5884EA534967; sessionid=9db437da69c359136786696f90ba89f2
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
username=to&password=password&this_is_the_login_form=1

HTTP/1.x 200 OK
Server: nginx/0.8.29
Date: Mon, 01 Feb 2010 10:52:02 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Expires: Mon, 01 Feb 2010 10:52:02 GMT
Vary: Cookie
Etag: "3355a46fb32d7cb6ab21262c359d9eec"
Cache-Control: max-age=0
Last-Modified: Mon, 01 Feb 2010 10:52:02 GMT

看起来这是一个与 cookie 相关的问题,但是,我猜,其根源是问题也可能出在 apache 和/或 nginx 配置中。

有什么想法可以让管理员登录表单立即生效吗?

干杯!

P.S.配置:

apache 虚拟主机配置:

<VirtualHost *:8001>

<Directory /home/toinbis/Desktop/programming/project/runtime/
htdocs/django_wsgi/>
Order deny,allow
Allow from all
</Directory>

WSGIDaemonProcess tsd user=www-data group=www-data threads=25
WSGIProcessGroup tsd

WSGIScriptAlias / /home/toinbis/Desktop/programming/project/
runtime/htdocs/django_wsgi/djproject.wsgi

LogLevel warn
ErrorLog /home/toinbis/Desktop/programming/project/runtime/logs/
apache_tsd_error.log
CustomLog /home/toinbis/Desktop/programming/project/runtime/logs/
apache_tsd_access.log combined

ServerName localhost
</VirtualHost>

nginx 配置:

daemon off;
#user www-data;
worker_processes 2;

error_log /home/toinbis/Desktop/programming/project/runtime/logs/
nginx_general_error.log;
pid /home/toinbis/Desktop/programming/project/runtime/var/pids/
nginx.pid;

events {
worker_connections 1024;
#server_names_hash_bucket_size: 128;

}

http {
include /home/toinbis/Desktop/programming/project/runtime/
etc/nginx_conf/mime.types;
default_type application/octet-stream;

access_log /home/toinbis/Desktop/programming/project/runtime/logs/
nginx_access.log;
error_log /home/toinbis/Desktop/programming/project/runtime/logs/
nginx_error.log;

sendfile on;
tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 2;
tcp_nodelay on;

server_names_hash_bucket_size 128;
#server_name_hashes 128;
gzip on;
gzip_comp_level 2;
gzip_proxied any;
gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #iš ubuntu
gzip_types text/plain text/css application/x-javascript text/xml
application/xml application/xml+rss text/javascript;

upstream backend {
server 127.0.0.1:8001;

}

server {
listen 8003;
server_name localhost;

error_log /home/toinbis/Desktop/programming/project/
runtime/logs/project_nginx_error.log;
access_log /home/toinbis/Desktop/programming/project/
runtime/logs/project_nginx_access.log;

location / {
proxy_pass http://backend/;
include /home/toinbis/Desktop/programming/
project/runtime/etc/nginx_conf/nginx_proxy_1.conf;
}

location /media/ {
root /home/toinbis/Desktop/programming/project/
src/tsd/core/;
}

}
}

干杯,至

最佳答案

@Eugene Morozov 指出了问题的最终结果,但我认为解决方案更深层次。

返回的Location header 不正确:

Location: http://127.0.0.1/admin/

这显然缺少端口号。不幸的是,很难确切地说出这是从哪里来的。您可能会遇到 Nginx 或 Apache 自动更改 Location header 的情况。我建议执行以下操作来查看问题出现在哪里:

  • 每次登录前请清除您的 Cookie,否则您可能会收到误报。
  • 直接转到您的 Apache 实例并查看问题是否仍然存在。
    • http://127.0.0.1:8001/admin/
    • 如果位置 header 上没有端口:
      • 在某个随机端口(例如 8005)上启动 Django 开发服务器,看看问题是否仍然存在:
        • 如果问题仍然存在,则问题出在您的代码中。
        • 如果问题不再存在,则说明 Apache 正在执行一些奇怪的操作,或者 WSGI/Django 未获取确定端口号所需的所有信息。
          • 确保 wsgi 脚本和 django 应用都可以看到环境中的端口号。
    • 如果位置 header 中有一个端口:
      • Nginx 由于某种原因正在剥离它。
      • 尝试将 Apache 排除在外,您可能不需要它。
        • 启动 Django 作为 FastCGI 服务器并将 Nginx 连接到该服务器而不是 Apache。
          • 这实际上会降低服务器的一些开销(减少请求传递、额外线程、内存使用等)。
          • 相当好的设置指南 over here .

忍者编辑!
不确定这是否有帮助,但 Nginx 中似乎有一个选项可以忽略重定向中的端口号。该网址已失效,因此我从 over here 粘贴此内容.

http://wiki.codemongers.com/NginxHttpCoreModule#port_in_redirect

syntax: port_in_redirect [ on|off ]
default: port_in_redirect on
context: http, server, location

Directive allows or prevents port indication in redirects handled by nginx.

关于python - Django 管理员身份验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com