46

我正在使用 Django 内置视图进行用户登录:

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

登录后,当我再次进入用户/登录时,我可以第二次登录。我提交表格并获得:

当前 URL,accounts/profile/,与其中任何一个都不匹配。

我没有在urls.py.

我做错了什么?为什么框架要重定向到这个 url?

4

6 回答 6

103

django.contrib.auth.views.loginaccounts/profile/登录后立即将您重定向到。
您可能希望LOGIN_REDIRECT_URLsettings.py文件中设置您喜欢的任何内容..

于 2012-11-01T22:58:43.527 回答
7

在文档中解释

(accounts/profile/ is ...) 当 contrib.auth.login 视图没有下一个参数时,登录后重定向请求的 URL。

因为您尚未通过身份验证,所以您的请求被重定向到此 url。为了避免重定向,您应该在发送用户之前注销用户user/login,创建您的自定义登录视图或附加 Next 参数

于 2012-11-01T22:57:50.290 回答
2

检查您的 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>

祝你好运~

于 2013-01-06T11:03:26.083 回答
1

所有这些对我都不起作用。我使用了 JavaScript 解决方案:

在 login.html(社交登录按钮所在的位置)中,我将这个脚本放在了本地存储中:

<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>

在用户被重定向到的页面中,我使用以下脚本进行重定向:

$(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..
    }
}
于 2013-10-15T09:01:05.710 回答
0

当您在 django 中使用视图构建时。并且您已成功登录。 django.contrib.auth.views.login 这是您使用的 django 视图。

它有一个名为 LOGIN_REDIRECT_URL 的参数,该参数会在您登录后自动重定向。默认情况下配置为默认值:'/accounts/profile/'。

wich 是当 LoginView 没有获得下一个 GET 参数时,在登录后重定向请求的 URL 或命名 URL 模式。说文件

https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-LOGIN_REDIRECT_URL

尝试将此添加到您用于登录的 html 页面表单中。

于 2020-12-20T23:05:30.887 回答
-1

两种方法,您可以使用注销“LOGIN_REDIRECT_URL”或

只需使用重定向到具有 @login_required 装饰器的视图方法的 url

例子

对于第二次登录,注销后(下面的代码在 logout.html 中)

<a href ="/">Login again </a>

在views.py

@login_required
def home(request):
  return HttpResponse("Welcome")
于 2020-11-26T19:10:37.643 回答