0

すべてのページにログインフォームがあります。Cookieが無効になっているためにログインに失敗した場合は、Cookieを有効にするように求めるメッセージをユーザーに表示したいと思います。私はこのミドルウェアを作成しました:

class CheckCookiesEnabled(object):
    def process_request(self, request):
        if request.user.is_anonymous():
            request.session.set_test_cookie()
        return

ログインビューで、チェックしrequest.session.test_cookie_worked()てログインした場合にのみログインします。そうでない場合は、メッセージを表示します。

if request.session.test_cookie_worked():
    request.session.delete_test_cookie()
    # Log in 
else:
    return HttpResponse(json.dumps({'errors': "Login failed (enable cookies to login)"}), mimetype = 'application/json')

問題は、request.session.test_cookie_worked()常に真実であるように思われるということです。ブラウザでCookieが無効になっている場合でも、DjangoはテストCookieを設定できるようです。これを修正する理由と方法はありますか?または、ブラウザでCookieが有効になっているかどうかを確認するためのより良い方法はありますか?

ちなみに、私set_test_cookie()がすべてのリクエストに応じた場合、Djangoは常に新しいCookieを設定しますか、それともまだCookieがない場合に限りますか?

4

2 に答える 2

3

ではなく、ミドルウェアを使用する必要set_test_cookieがあります。は常にtrueです。これは、コントロールがビューに移動する前に実行される「cookie」を-に入力することで、常に自分で追加するためです。process_responseprocess_requesttest_cookie_workedrequest.sessionprocess_request

于 2013-02-16T16:09:54.910 に答える
0

JavaScriptを使用することになりました:

function cookies_enabled() {
    if (navigator.cookieEnabled) {
        return true;
    } else if (navigator.cookieEnabled === undefined) {
        document.cookie = "testcookie";
        if (cookie_present("testcookie"))
            return true;
    }
    return false;
}

正常に動作します。とにかくありがとう。

于 2013-02-16T16:43:08.737 に答える