0

reddit API のログイン機能を追加したいのですが、Cookie が保存されません。次のコードは、Django 独自の ModelBackend よりもスタックの上位にインストールされているカスタム認証バックエンドで呼び出されています。

response = requests.post(REDDIT_LOGIN_URL, data={'user' : username, 
                                                 'passwd' : password})
cookie = SimpleCookie()
cookie.load(response.headers.get('set-cookie'))

cookie['reddit_session'] を印刷すると、(難読化された) Morsel が返されます

<Morsel: reddit_session='5356323%2C2012-05-15T17%3A15%3A08%xxxxxxxxxxxx7a4f25351b003a2484'>

しかし、この Cookie は私のブラウザのどこにもありません。ページがリロードされると、reddit セッションがなくなり、このセッションを再度作成しない限り、他の reddit API 呼び出しを使用できなくなります。Chrome 開発者ツールを使用して Cookie を確認すると、[Resources] > [Cookies] の下に「blank」というエントリが表示されます。これをクリックすると、「このサイトには Cookie がありません」という白いページしか表示されません。

私はdjango-1.4でこれを行っています

SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"

settings.py で有効にします。せずに試してみましたが、結果は同じでした。

ここで何か不足していますか?私もnarwaを使ってみましたが、クッキーも保存されていません。同じ Django セッションが django_language および session_id Cookie を保存しているため、ブラウザーで Cookie が確実に有効になっています。

ポインタや回答をいただければ幸いです。

4

1 に答える 1

1

正確にはわかりませんが、API をいじっているときは、 を保存modhashしてリクエストと共に送信するだけで済みます。また、requestsモジュールを使用している場合は、代わりにセッション インスタンスを使用すると、呼び出し間で Cookie が保存されます。ただし、それがDjangoにどのように影響するかはまったくわかりません。ログイン用に書いたコードは次のとおりです。

def login(username, password):
    """logs into reddit, saves cookie"""

    print 'begin log in'
    #username and password
    UP = {'user': username, 'passwd': password, 'api_type': 'json',}
    headers = {'user-agent': '/u/STACKOVERFLOW\'s API python bot', }
    #POST with user/pwd
    client = requests.session()

    r = client.post('http://www.reddit.com/api/login', data=UP)

    #print r.text
    #print r.cookies

    #gets and saves the modhash
    j = json.loads(r.text) #I believe r.json == j at this point

    client.modhash = j['json']['data']['modhash']
    print '{USER}\'s modhash is: {mh}'.format(USER=username, mh=client.modhash)

    #pp2(j)

    return client
于 2012-06-26T13:12:40.660 に答える