Django& Allauth登录重定向问题

时间:2016-09-14 06:46:00

标签: django jquery-mobile login django-allauth

由于某些原因,登录后页面不会重定向到LOGIN_REDIRECT_URL指向的位置,但仍保留在空白页面/ accounts / login /上,代码为200.因此,登录后我得到一个空白页面并且必须刷新(F5)到我的LOGIN_REDIRECT_URL。刷新后我成功了。

ACCOUNT_LOGOUT_REDIRECT_URL正常工作,返回代码302并直接重定向,没有空白页,但LOGIN_REDIRECT_URL没有。如果我在刷新后更改了LOGIN_REDIRECT_URL,我将被重定向到更改的位置,这样可以正常工作。但首先我总是卡在空白页/ accounts / login /上。无法找出发生这种情况的原因。

没有错误消息,我在AllAuth LoginView中找不到任何问题。

没有太多的代码可以显示,这是内置的django和allauth功能,我已成功用于较小的django版本的其他应用程序,这是我的第一个项目django 1.10.1。它也是我的第一个具有jquery移动功能的移动项目。所以这是我的设置:

DEBUG = True

ALLOWED_HOSTS = ['*']
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

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

'django.contrib.sites',
#'django.contrib.flatpages',

'appconf',
'avatar',
'myApp',

'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.google',

'django.contrib.admin',

'lockdown',

]

MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
#'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'lockdown.middleware.LockdownMiddleware',

]

LOGIN_REDIRECT_URL = '/'
ACCOUNT_LOGOUT_REDIRECT_URL = '/'

这是登录表单:

<a class="login_link" href="#popupLogin" data-rel="popup" data-position-to="window" class="" data-transition="pop">Login</a>
<div data-role="popup" id="popupLogin" data-theme="a" class="ui-corner-all">
<form id="login_form" method="POST" action="{% url 'account_login' %}">
    {% csrf_token %}
    <div style="padding:10px 20px;">
        <h3>Please sign in</h3>
        {{loginForm.login}}
        {{loginForm.password}}
          {% if redirect_field_value %}
              <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
          {% endif %}
          <button type="submit" class="ui-btn ui-corner-all ui-shadow ui-btn-b ui-btn-icon-left">Sign in</button>
    </div>
</form>
{% if loginForm.errors %}
    {% for field in loginForm %}
        {% for error in field.errors %}
            <div class="alert alert-danger">
                <strong>{{ error|escape }}</strong>
            </div>
        {% endfor %}
    {% endfor %}
    {% for error in loginForm.non_field_errors %}
        <div class="alert alert-danger">
            <strong>{{ error|escape }}</strong>
        </div>
    {% endfor %}
{% endif %}

</div>

以下是终端中发生的事情:

注销:

[14/Sep/2016 06:36:18] "POST /accounts/logout/ HTTP/1.1" 302 0
[14/Sep/2016 06:36:24] "GET / HTTP/1.1" 200 12295

登录:

[14/Sep/2016 06:36:34] "POST /accounts/login/ HTTP/1.1" 200 46

登录后手动刷新:

[14/Sep/2016 06:37:00] "GET /accounts/login/ HTTP/1.1" 302 0
[14/Sep/2016 06:37:00] "GET / HTTP/1.1" 200 11434

更新 使用allauth进行帐户注册时会出现同样的问题。 url accounts / signup /是一个需要刷新的空白页面,以便重定向到包含注册表单的实际模板。我还没有解决它。

1 个答案:

答案 0 :(得分:0)

原来,jquery-mobile将过渡css放在最顶层的容器上并更改背景颜色。因此,禁用它解决了获取空白页面的问题。页面内容在那里,只是jquery-mobile没有删除它的过渡css。

为什么没有allauth重定向?在一种情况下,因为表单包含jquery-mobile使用ajax处理但未显示的错误(甚至在删除转换css之后)。

我决定停止使用jquery-mobile工作,也许我会回到它,但现在不行。