5

私はdjangoで遊んでいて、ユーザーがURL 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'に属する情報を、ブラウザーで/ jimmy / info /edit/をポイントするだけで編集することは望ましくありません。上記は機能しますが、セキュリティに関しては、ここで何かが欠落していることが懸念されます。これはこれについて行く正しい方法ですか?ありがとう。

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 に答える