无法使用有效的用户名和密码登录到django管理员页面

无法使用有效的用户名和密码登录到django管理员页面,django,session-cookies,session-timeout,django-settings,django-sessions,Django,Session Cookies,Session Timeout,Django Settings,Django Sessions,编辑: 我在amazon AWS上托管了一个网站,域名为say(www.abc.com) 首先:我尝试登录到django管理站点,但它再次重定向到同一页面,没有显示任何错误(注意:用户名和密码正确) 第二步:成功注册后,尝试使用用户名和密码登录django内部页面: 它通过在url之间添加next关键字重定向到同一登录页面 http://www.abc.com/login/?next=/employee/jcbdfvdhdfhvhdfsvsdhfhb-super-admin/home/dashb

编辑:

我在amazon AWS上托管了一个网站,域名为say(www.abc.com

首先:我尝试登录到django管理站点,但它再次重定向到同一页面,没有显示任何错误(注意:用户名和密码正确)

第二步:成功注册后,尝试使用用户名和密码登录django内部页面: 它通过在url之间添加next关键字重定向到同一登录页面

http://www.abc.com/login/?next=/employee/jcbdfvdhdfhvhdfsvsdhfhb-super-admin/home/dashboard/
在调查服务器后发现一件事:

我已经停止了所有应用程序,如wsgi、Supervisorctl、ngnix等。 然后在ec2 aws控制台(终端)上运行以下命令

注意:xxx.xx.xx.xx是我的域名(www.abc.com)IP

它成功地登录到django管理站点以及项目内部页面

在djano环境中,我缺少什么吗? 我被这个问题困扰了很长时间。任何答案都将是可观的

请问我,如果你需要从我的项目代码

选中此处的所有选项:

编辑的settings.py文件:

import sys, os
from os.path import abspath, basename, dirname, join, normpath

### from 2 scoops of django
# Normally you should not import
# ANYTHING from Django directly into
# your abc_settings, but
# ImproperlyConfigured is an
# exception.
from django.core.exceptions \
    import ImproperlyConfigured

msg_get ="Set the %s environment variable"
msg_unset ="The %s environment variable not defined"

def get_env_variable(var_name):
    try:
        return os.environ[var_name]
    except KeyError:
        error_msg = msg_get % var_name
        raise ImproperlyConfigured(error_msg)

def set_env_variable(var_name, value_str):
    os.environ[var_name] = value_str

def unset_env_variable(var_name):
    try:
        del os.environ[var_name]
    except KeyError:
        error_msg = msg_unset % var_name
        raise ImproperlyConfigured(error_msg)
### end snippet

ATOMIC_REQUESTS = True

########## PATH CONFIGURATION

# Absolute filesystem path to this Django project directory.
DJANGO_ROOT = dirname(dirname(dirname(abspath(__file__))))
CONFIG_ROOT = dirname(dirname(abspath(__file__)))

import sys


sys.path.append(normpath(join(DJANGO_ROOT, 'apps')))

# Site name.
SITE_NAME = basename(DJANGO_ROOT)
SITE_ID = 1
# Absolute filesystem path to the top-level project folder.
SITE_ROOT = dirname(DJANGO_ROOT)

# Add all necessary filesystem paths to our system path so that we can use
# python import statements.
sys.path.append(SITE_ROOT)
#sys.path.append(normpath(join(DJANGO_ROOT, 'apps')))
#sys.path.append(normpath(join(DJANGO_ROOT, 'libs')))
#########/# END PATH CONFIGURATION

########## SECURITY CONFIGS
def set_secret_key_env():
    # Generating a SECRET_KEY. Will be auto-generated the first time this file is interpreted.
    try:
        os.environ['SECRET_KEY']
    except KeyError:
        import random
        os.environ['SECRET_KEY'] = \
            ''.join([random.SystemRandom().choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)])

#tocheck - is it ok to uncomment this or should we use this to generate a secret key and set it normally,
#tocheck - in production on heroku for ex?
set_secret_key_env()
SECRET_KEY = get_env_variable('SECRET_KEY')

BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = "redis://"
CELERY_TRACK_STARTED = True
########## END CELERY CONFIGURATION
########## DJANGO-TEMPLATED-EMAIL CONFIGURATION
TEMPLATED_EMAIL_BACKEND = 'templated_email.backends.vanilla_django.TemplateBackend'
TEMPLATED_EMAIL_TEMPLATE_DIR = 'communication/email/' #use '' for top level template dir, ensure there is a trailing slash
TEMPLATED_EMAIL_FILE_EXTENSION = 'email'
########## END DJANGO-TEMPLATED-EMAIL CONFIGURATION
########## MANAGER CONFIGURATION
# Admin and managers for this project. These people receive private site
# alerts.
#tothink - should this be different for different environments
ADMINS = (
    ('Nirmal', 'nighggngh@abc.com'),
    ('Harsha', 'jjjjjjjgarkkwal@abc.com'),
)
########## URL CONFIGURATION
ROOT_URLCONF = '%s.urls' %SITE_NAME
########## END URL CONFIGURATION

MANAGERS = ADMINS
########## END MANAGER CONFIGURATION

########## GENERAL CONFIGURATION
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.5/ref/abc_settings/#allowed-hosts
ALLOWED_HOSTS = ['www.abc.com']

TIME_ZONE = 'Asia/Kolkata'

WSGI_APPLICATION = 'abc.wsgi.application'

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = False

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html.
LANGUAGE_CODE = 'en-us'


USE_I18N = False

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True
########## END GENERAL CONFIGURATION
########## EMAIL CONFIGURATION
#todo - should probably go into environment variables
#todo - get actual domain email etc
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.abc.com'
EMAIL_PORT = 587
#change this to proper email with hems domain
EMAIL_HOST_USER = 'abc@abc.com'
EMAIL_HOST_PASSWORD ='websupport2307'
EMAIL_USE_TLS = True
DEFAULT_FROM_EMAIL  = 'abc@abc.com'
#EMAIL_USE_TLS = True
# ########## END EMAIL CONFIGURATION

########## MEDIA CONFIGURATION
# Absolute filesystem path to the directory that will hold user-uploaded files.
MEDIA_ROOT = normpath(join(DJANGO_ROOT, 'media')).replace('\\','/')

# URL that handles the media served from MEDIA_ROOT.
MEDIA_URL = '/media/'
########## END MEDIA CONFIGURATION
AUTHENTICATION_BACKENDS = ('custom.backends.EmailOrUsernameModelBackend','django.contrib.auth.backends.ModelBackend')

STATIC_ROOT = normpath(join(DJANGO_ROOT, 'final_static'))

# URL prefix for assets files.
STATIC_URL = '/static/'

# URL prefix for admin assets files -- CSS, JavaScript and images.
ADMIN_MEDIA_PREFIX = '/assets/admin/'

# Additional locations of assets files.
STATICFILES_DIRS = (
    normpath(join(DJANGO_ROOT, 'static')),
    )

# List of finder classes that know how to find assets files in various
# locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    #'django.contrib.staticfiles.finders.DefaultStorageFinder',
    )

TEMPLATE_CONTEXT_PROCESSORS =('django.contrib.messages.context_processors.messages',
                              'django.contrib.auth.context_processors.auth',
                              "django.core.context_processors.request"
                                )

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    #'django.template.loaders.eggs.Loader',
    )

# Directories to search when loading templates.
TEMPLATE_DIRS = (
    normpath(join(DJANGO_ROOT, 'templates')),
    normpath(join(DJANGO_ROOT, 'templates/Home_Page')),
    normpath(join(DJANGO_ROOT, 'templates/Marketplace')),
    normpath(join(DJANGO_ROOT, 'templates/Organisation')),
    normpath(join(DJANGO_ROOT, 'templates/Organisation_Role')),
    normpath(join(DJANGO_ROOT, 'templates/base')),
    normpath(join(DJANGO_ROOT, 'templates/external')),
    normpath(join(DJANGO_ROOT, 'templates/certificates')),
    normpath(join(DJANGO_ROOT, 'templates/password_reset')),
    normpath(join(DJANGO_ROOT, 'templates/support_dashboard')),
    )

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
  #  'django.contrib.sessions.backends.signed_cookies',
    'custom.subdomain.SubdomainMiddleware', #middleware for subdomain
    )


INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    #    # Admin panel and documentation.

    'django.contrib.admin',
    #   'django.contrib.admindocs',

    # South migration tool.
    'south',
    # Celery task queue.
    'djcelery',
    'apps.certificates',
    'apps.account_subscription',
    'apps.common_ds',
    'apps.location',
    'apps.communication,
    'apps.transanction_history',
    'rest_framework',
    'apps.external_user',
    'gunicorn',
    #'notification'
    #django extensions (recommended by 2 scoops of django)
 )

 import djcelery
djcelery.setup_loader()

CELERY_IMPORTS = (
    'apps.communication.functionality.email',
    'apps.organisation_roles.functionality.parse_employees_from_file',
)


LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': '/home/ubuntu/logs/abc/logger.log',
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['file'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}


AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_SAVE_EVERY_REQUEST = True
SESSION_COOKIE_AGE = 86400 # sec
SESSION_COOKIE_DOMAIN = '.abc.com'
SESSION_COOKIE_NAME = 'DSESSIONID'
SESSION_COOKIE_SECURE = False



DEBUG = True
TEMPLATE_DEBUG = DEBUG
LOGIN_URL = '/login/'
########## END DEBUG CONFIGURATION



########## DATABASE CONFIGURATION
#todo should go into environment variables
import dj_database_url
import os
if not os.environ.has_key('DATABASE_URL'):
    os.environ['DATABASE_URL'] = 'postgres://abc:abc@abc-db.us-east-1.rds.amazonaws.com/dev_abc_db'

DATABASES = {
    'default': dj_database_url.config(default=os.environ['DATABASE_URL'])
这看起来像是“挂不住的果实”,但我也经常遇到类似的问题(登录到Django Admin后,会在没有明显原因的情况下返回到登录页面)。每次都被证明是一个解决方案,就是清除我的浏览器缓存和cookie…所有这些(而不仅仅是最后一个小时左右)


希望这能有所帮助。

您的设置文件似乎很好。您是否将Gunicorn与多个工作人员一起使用,如果是,请尝试仅与单个工作人员一起使用。实际上,会话不会在多个工作进程之间传输,除非您将一些中间层存储组件(如memcached或redis)带到会话中。一段时间以前也面临同样的问题。希望它能解决您的问题:)

首先尝试注释以下所有行, 然后重新启动服务器

#AUTHENTICATION_BACKENDS = ('custom.backends.EmailOrUsernameModelBackend','django.contrib.auth.backends.ModelBackend')

#   'apps.communication,

#AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
#SESSION_EXPIRE_AT_BROWSER_CLOSE = True
#SESSION_SAVE_EVERY_REQUEST = True
#SESSION_COOKIE_AGE = 86400 # sec
#SESSION_COOKIE_DOMAIN = '.abc.com'
#SESSION_COOKIE_NAME = 'DSESSIONID'
#SESSION_COOKIE_SECURE = False
我注意到的事情:

1:在已安装的应用程序中,
“应用程序通信”后缺少撇号

INSTALLED_APPS = (
   'django.contrib.auth',
   # -- snip --
   'apps.communication,
)
2:您已经定义了两次Authentication\u后端。在这种情况下,您的第二个元组只是踩在第一个元组上

3:身份验证后端的顺序很重要


4:您不需要列出'django.contrib.auth.backends.modelbend',因为如果安装的应用程序中有'django.contrib.auth',将对其进行搜索。(您已配置)

服务器对/employee/jcbdfhddfhdhhdfsvsdhfhb super admin/home/dashboard/的响应是什么?也许您没有正确地检查用户是否登录…它的附件是下一步,而不是进入仪表板,它再次进入登录页面:url:login/?next=/employee/JCBDFVDHDFSVSDHFHB super admin/home/dashboard/注意:用户名和密码已验证,我已在Shells上进行了检查您是否使用自定义身份验证模型?您是否可以发布您的设置文件?您是否检查了nginx错误日志以查看是否遇到任何问题?对于日志处理程序,我使用了django auth模型。但是让我的loginMixin处理程序保存用户名和密码谢谢@ankurloader,这挽救了这一天!因为在解决django的登录问题时没有任何错误迹象!
INSTALLED_APPS = (
   'django.contrib.auth',
   # -- snip --
   'apps.communication,
)