3

我正在使用 django-registration 来处理我的 Django 应用程序中的登录和用户注册。我希望用户在成功登录系统后被重定向到他们请求的 url(假设他们在最初尝试访问该 url 时已注销)。

登录网址如下所示:

http://localhost:8000/accounts/login/?next=/#foo/bar/

但是,登录后,用户总是以http://localhost:8000/. 我已经尝试过了http://localhost:8000/accounts/login/?next=/abc/def/,效果很好,所以我认为主题标签是问题所在。如何解决这个问题(如果有的话)?

更新

我应该提到它是一个单页应用程序,因此标签...

4

2 回答 2

1

我开始单步执行 django-registration(实际上是 django)代码。我在登录期间找不到 django-registration 正在做的任何事情,所以我认为它甚至不负责这部分。

Django 将@login_required视图函数包装在_wrapped_view(request, *args, **kwargs)函数 ( django.contrib.auth.decorators) 中,并在执行实际函数之前执行身份验证测试。如果发现尚未登录,则将当前 url 获取为next( path = request.build_absolute_uri()) 并开始登录。但是,request.build_absolute_uri()甚至不返回主题标签 url。提取 url 的#-appended 部分通常似乎是不可能的

于 2013-09-08T03:50:31.467 回答
0

对不起死灵法师,但我用以下方法解决了这个问题:

我有一个登录表单模板,其中包含以下内容:

<form method="post" action="{% url 'login' %}">
    {% csrf_token %}
    <input type="hidden" id="hidden_next" name="next" value="{{ next }}">
    ... the actual form here ...
</form>

和(我正在使用 JQuery)最后的以下脚本:

<script>$(function () { 
    $("#hidden_next").attr(
        "value", "{{ next }}" + 
            $(location).attr('hash'))
    });
</script>

请注意,我正在重复{{ next }}以防万一用户禁用 Javascript。在单页应用程序中,这不是问题,因为禁用 javascript 的用户根本无法使用该页面。

于 2015-06-25T09:34:19.570 回答