django - 限制用户仅编辑自己的信息

时间:2009-10-22 09:39:30

标签: django security django-authentication

我正在玩django并构建了一个小应用程序,用户可以通过网址http:///localhost:8000/username/info/访问他们的信息。我想通过http:///localhost:8000/username/info/edit/添加编辑该信息的功能,但也希望确保当前登录的用户(使用django.contrib.auth)只能访问他的信息。我通过在视图中执行以下操作来完成此操作(视图中的用户名是从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'的信息。上面的工作,但我担心的是,就安全性而言,我在这里遗漏了一些东西。这是正确的方法吗? 感谢。

2 个答案:

答案 0 :(得分:2)

这应该适用于您要做的事情而没有任何明显的安全风险。

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

答案 1 :(得分:1)

使用@login_required并解析request.user,它们永远不会以anothers配置文件结束。我的个人资料视图

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