Подтвердить что ты не робот

Почему второй пользовательский логин перенаправляет меня на/accounts/profile/url?

Я использую Django, созданный для входа пользователя:

url(r'^user/login/$', 'django.contrib.auth.views.login', {'template_name': 'users/templates/login.html'}, name='user-login'),

После входа в систему, когда я снова подключу пользователя/логин, я могу войти в систему второй раз. Я отправляю форму и получаю:

Текущий URL-адрес, учетные записи/профиль/, не соответствуют ни одному из них.

Я не объявляю этот url в urls.py.

Что я делаю неправильно? Почему инфраструктура хочет перенаправить на этот URL?

4b9b3361

Ответ 1

django.contrib.auth.views.login перенаправляет вас на accounts/profile/ сразу после входа в систему.
Вы можете установить LOGIN_REDIRECT_URL внутри вашего файла settings.py на все, что вам нравится.

Ответ 2

Объяснено в документе:

(учетные записи/профиль/есть...) URL-адрес, по которому запросы перенаправляются после входа в систему, когда В представлении contrib.auth.login отсутствует следующий параметр.

Поскольку вы еще не аутентифицированы, ваш запрос перенаправляется на этот URL-адрес. Чтобы избежать перенаправления, вы должны выйти из системы перед тем, как отправить его на user/login, создать свой пользовательский режим просмотра или добавить следующий параметр.

Ответ 3

@CpS предоставил очень хорошее решение, я просто хочу немного его улучшить:

Например, у вас есть следующие URL:

urlpatterns = [
    # django login/logout
    url(r'login/$', 'django.contrib.auth.views.login', name='login'),
    url(r'logout/$', 'django.contrib.auth.views.logout', name='logout'),
    url(r'logout-then-login/$', 'django.contrib.auth.views.logout_then_login', name='logout_then_login'),
    url(r'^$', views.dashboard, name='dashboard')
]

и dashboard.html - это то, куда вы хотите перенаправить после успешного входа в систему, затем вы можете соответствующим образом изменить ваш файл settings.py:

from django.core.urlresolvers import reverse_lazy

LOGIN_REDIRECT_URL=reverse_lazy('dashboard')
LOGIN_URL=reverse_lazy('login')
LOGOUT_URL=reverse_lazy('logout')

Мы используем reverse_lazy() для динамического создания URL-адресов. Функция reverse_lazy() меняет URL-адреса так же, как и reverse(), но вы можете использовать ее, когда вам нужно отменить URL-адреса до загрузки конфигурации URL-адреса проекта.

Ответ 4

проверьте свой login.html

<form method="post" action=".">
    ~blah~
    <input type="hidden" name="next" value="/"><!-- login.html must send "next" parameter, and "next" parameter value is url that you want to redirect.  -->
    ~blah~
</form>

удачи ~

Ответ 5

Все это не помогло мне. Я использовал решение JavaScript:

В login.html(где находятся кнопки социального входа) я помещаю этот script, который хранит следующий в локальном хранилище::

<script>
// Check for local storage
if (typeof(Storage) !== "undefined") {
    var h = window.location.href;
    if (h.indexOf("next") > 0){
        var tokens = h.split("=");
        var nextUrl = tokens[1];

        for(i = 2;i< tokens.length;i++){
            nextUrl += ("=" + tokens[i]);
        }
        localStorage.setItem("next",nextUrl);

    }
}
</script>

На странице, на которую перенаправляются пользователи, я использовал следующий script для перенаправления:

$(document).ready(function () {

    // Check for local storage
    if (typeof(Storage) !== "undefined") {
            var nextUrl = localStorage.getItem("next");
            if (nextUrl.length > 0){
                localStorage.setItem("next","");
                window.location = nextUrl;
            }
    }
    else {
        // Sorry! No web storage support..
    }
}