2

ユーザー名、パスワード、およびドメインを使用して Web サービスに対して認証する Django のカスタム認証を使用するサイトがあります。後続のビューのリクエスト オブジェクトごとにこの情報を保存する必要があります。

jquery $.ajax 呼び出しを行い、ajax 要求から呼び出されるビューをデバッグするまで、すべてがうまくいっているようです セッション情報がなく、ユーザーは AnonymousUser です。

データを表示するための Web サービスへの後続の呼び出しを行うには、セッション変数が必要です。そこでいくつか試してみましたが、何も正しく機能していないようです。これらのWebサービスクエリを送信する前に、ユーザーがログインしていることを確認したいのは、ビューでパスワードを検索するためにユーザー名/ドメインを保持し(クライアント側には持たない)、ユーザーが常にログインしました。

ビュー.py

def login(request):
    if settings.DEBUG == True:
        print "views.login:Attempting loging at views.login(request)"

    if request.method == 'POST':
        if settings.DEBUG:
            print "views.login: method is POST"

        form = LoginForm(request.POST)

        if form.is_valid():
            if settings.DEBUG:
                print "Form is valid, attepmting to authenticate"
            Login(request, form.get_user())
            str = reverse('cm_base.views.index')
            request.session['username']=form.get_user()
            request.session['domain']=form.get_domain()

            return render_to_response('cm_base/index.html', 
                              {"DEBUG": True,
                               "user":request.session.get('username'),
                               'tabs': settings.TAB_LIST},
                              context_instance=RequestContext(request))
        else:
                # Their password / email combination must have been incorrect
            pass

    else:
        form = LoginForm()

    return render_to_response('cm_base/login.html', 
                              {"DEBUG": True,
                               'form' : form
                               },
                              context_instance=RequestContext(request))

@login_required()
def index(request):
    if request.method == 'POST':
        print "POSTING"
    if settings.DEBUG == True:

        print "views.index:Opening index"

    return render_to_response('cm_base/index.html', 
                              {"DEBUG": True,
                               "user":"user",
                               'tabs': settings.TAB_LIST},
                              context_instance=RequestContext(request))

@login_required()
def scorecard(request):
    user = CustomUser.objects.get(username=request.session.get('username'),
                                  domain=request.session.get('domain'))

* 上記の行で DoesNotExist: CustomUser matching query does not exist で失敗します。ルックアップ パラメータは {'username': None, 'domain': None} でした

base.js

$.ajax({
    url : path,
    data: $(this).serialize(),
    headers: {'X-CSRFToken':getCookie('csrftoken')
        ,'sessionid':getCookie('sessionid')
        },
    success : function(data) {
        console.log($(this));
        //refresh right div
        $('#contentpane').empty();
        $('#contentpane').html(data.rhtml);
        console.log(data.rhtml);
    }
});
4

1 に答える 1

1

問題だったバックエンドの私の実装のようです。

backends.py

class CustomBackend(object)
...
def get_user(self, username):
    try:
        return CustomUser.objects.get(username=username)
    except CustomUser.DoesNotExist:
        return None

これはセッションの受け渡し中に呼び出され、実際にはユーザー名ではなくユーザー ID である主キーを使用するため、これは常にユーザーを返さず、匿名ユーザーにデフォルト設定されていました。ユーザーIDはユーザー名を含めて何でもよいとドキュメントに記載されている場合、私はそれをそのまま渡すことができると思っていましたが、自動生成されたユーザーIDとオブジェクトのユーザー名の両方を持っています。

于 2013-04-23T15:12:33.073 に答える