2

我创建了一个非常基本的登录应用程序。LOGIN_URL、LOGIN_REDIRECT_URL 和 LOGOUT_URL 工作得很好。

问题是,如果我成功登录,然后关闭窗口(浏览器),然后重新打开浏览器,我可以完美地搜索 url(我想只查看我是否登录的那个)并使用应用程序无需再次登录。这不是它结束的地方:如果我同时打开 2 个单独的浏览器:Chrome 和 Firefox,并且我只登录一个,我可以毫无问题地使用来自另一个浏览器的应用程序。我不希望这发生。我尝试在 urls.conf 中将 login_required 用于索引视图(只有登录后才能看到的页面),在类视图中,我尝试使用 stronhold 和 django-braces。有没有其他方法可以做到这一点?如果您想查看任何代码,请告诉我。我使用登录并注销 django 实现(auth)。比你

4

3 回答 3

5

我知道这是一篇旧帖子,但也许答案会在未来对其他人有所帮助。如果您的工作流程是基于类的视图,您必须使用:LoginRequiredMixin

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views import generic

class CreateGroup(LoginRequiredMixin, generic.CreateView):
    fields = ('name', 'description')
    model = Group

LoginRequired 混合

使用基于类的视图时,您可以使用 LoginRequiredMixin 归档与 login_required 相同的行为。这个 mixin 应该在继承列表的最左边。

https://docs.djangoproject.com/en/2.0/topics/auth/default/

于 2017-12-21T11:27:57.277 回答
2

看起来您需要使用 Django 的login_required装饰器来包装“私有”视图:

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

LOGIN_URL如果用户未登录或未通过身份验证,这将重定向到。

于 2014-07-07T23:01:36.930 回答
0

在您的登录重定向到的视图中,您可以添加:

def after_login(request,..):
    if not request.user.is_authenticated():
        redirect('some-non-existence-page-or-404',...)
    #Your code
    return
于 2014-07-07T20:58:42.957 回答