3

OAuthWebサイトのrauthで言及されているpythonlibは、シンプルで使用するのに最適なもののようです。だから、Djangoで使いたいのですが、実際には実装できません。

これが私の問題です。

# I do something like this initially
from rauth.service import OAuth2Service
from django.shortcuts import render_to_response
def page(request):
    service = OAuth2Service(
                           consumer_key = "..",
                           consumer_secret = "...",
                           .. )
    url = service.get_authorize_url(redirect_uri="http://mysite.com/redired-url")
    # this url is where the user accepts or not.
    # which redirects with authorization code.
    return HttpResponseRedirect(url)

これで、ユーザーがページを開くと、直接リダイレクトされ、ユーザーに許可または拒否を求められます。ユーザーが許可した場合、redirect-urlで認証コードを取得します。

認証トークンからアクセストークンを取得するには、

rauth libはそうするように言及しており、redirect-urlに対応する別のビューの下に置く必要があります

data = dict(code='foobar',
            grant_type='authorization_code',
            redirect_uri='http://example.com/')
token = service.get_access_token('POST', data=data)

問題はserviceオブジェクトにあります。あるビューでインスタンスを作成serviceしました。アクセストークンを取得するには、別のビューでインスタンスを使用する必要があります。

どこが間違っているのか..?それを成し遂げる方法。

4

2 に答える 2

1

Web アプリのコンテキストでこれを処理するには、さまざまな方法があります。サンプル ディレクトリにあるFacebook Flask の例を参照することを強くお勧めします。

基本的な考え方は、承認ビューとリダイレクト ビューを提供することです。プロバイダーをリダイレクト ビューにリダイレクトさせたい場合、その中で、ユーザーによって承認されていると仮定して、実行できると予想されるすべてのことを実行する必要があります。それ以外の場合は、救済し、場合によってはユーザーに理由を通知する必要があります。

私が通常行うことは、サービス ラッパーをビューではなく別のモジュールに保持し、必要なコンテキストにインポートすることです。それらを動的に初期化するなどのことができます。ただし、簡単な実装については、私が投稿したリンクを参照してください。これはあなたが望むことをするべきだと思います。Django ではないことはわかっていますが、イディオムはこのようなビューの単純なケースにかなり近いものです。

于 2013-03-28T21:51:25.357 に答える