5

我正在玩 django 并构建了一个小应用程序,用户可以在其中通过 url http:///localhost:8000/username/info/访问他们的信息。我想添加通过http:///localhost:8000/username/info/edit/编辑该信息的功能,但也想确保当前登录的用户(使用 django.contrib.auth)只能访问他的信息。我通过在视图中执行以下操作来完成此操作(视图 args 中的用户名是从 url 捕获的):

@login_required
def edit_info(request, username=''):
    if request.user.username == username:
        # allow accessing and editing the info..
    else:
        # redirect to some error page

所以,很明显,我不希望用户“johnny”通过简单地将浏览器指向/jimmy/info/edit/来编辑属于用户“jimmy”的信息。以上工作,但我担心的是,就安全性而言,我在这里遗漏了一些东西。这是解决这个问题的正确方法吗?谢谢。

4

2 回答 2

2

这应该适用于您正在尝试做的事情,而没有任何明显的安全风险。

但是,如果没有其他人在这个位置至少可以看到个人资料或其他东西,为什么还要显示他们的用户名呢?这不是更像一个“帐户”页面吗?然后您不会检查 url 中的用户名,您可以访问的唯一 url 将是帐户,它只会加载登录用户的信息。

于 2009-10-22T09:46:24.337 回答
1

使用 @login_required 并解析 request.user 他们将永远不会出现在其他人的个人资料中。我的个人资料视图

@login_required
def user_profile(request):
    """ User profile page """
    u = User.objects.get(pk=request.user.pk)

    return render_to_response('myapp/user_profile.html', {
                                'user': request.user,
                                })

然后在模板中简单地使用类似的东西:

Welcome <b>{{ user.first_name }} {{ user.last_name }}</b>
于 2009-10-22T12:02:49.957 回答