16

私は現在、python-social-authを使用してソーシャルネットワーク経由で認証を処理する必要があるDjango(1.7)を使用してサーバーバックアンドを開発しています。シンプルな Web アプリケーションのプロセスを説明するこのサイトのチュートリアルに従いました。これは、Google と Twitter のログインで完全に機能しました。

サーバーは単なる REST-FULL バックエンドであるべきなので、クライアント側で Access-Token を取得してサーバーに送信することにしました。サーバーはそれで認証されます。このプロセスは問題なく、python-social-auth のドキュメントに例として示されています。

ただし、すべてをセットアップすると、「Backend not Found 404」というエラーが表示されます。

ここにプロジェクトの最小限の部分があります:

settings.py: (API_KEY と SECRET も含めました)

AUTHENTICATION_BACKENDS = (
   #'social.backends.facebook.FacebookOAuth2',
   'social.backends.google.GoogleOAuth2',
   'social.backends.twitter.TwitterOAuth',
   'django.contrib.auth.backends.ModelBackend',
)

views.py (認証ビュー用)

from django.contrib.auth import login

from social.apps.django_app.utils import psa

@psa('social:complete')
def register_by_access_token(request, backend):
    token = request.GET.get('access_token')
    user = request.backend.do_auth(request.GET.get('access_token'))
    if user:
        login(request, user)
        return 'OK'
    else:
        return 'ERROR'

これは、ドキュメントから海峡をコピーし、backend.do_auth を request.backend.do_auth に変更しただけです。これはドキュメントのエラーのようです。

urls.py:

...
url(r'^register-by-token/(?P<backend>[^/]+)/$', 'register_by_access_token')
...

また、ドキュメントで提案されているように。

アクセストークンを提供する単純なjs-libがあるため、これをgoogle-oauthだけで機能させようとしました。これも非常にうまく機能し、リクエストを送信します

GET http://localhost:8000/register-by-token/google-oauth2/<access-token>/

上記のように、返されたのは 404 Backend not found でした。少しデバッグを行ったところ、バックエンドの do_auth() 関数ではなくログイン関数でエラーが発生していることがわかりました。したがって、実際の認証プロセスが機能します。また、ランダムに生成された文字列をトークンとして使用しようとしたところ、ユーザーを認証できないというエラーが発生しました。

面白いのは、ユーザーが「social.backends.google.GoogleOAuth2」を保持するプロパティ バックエンドを持っていることです。

長い投稿で私と一緒にいてくれてありがとう。誰かが何が間違っているのか考えてくれることを願っています:)。回答をお待ちしております。

4

1 に答える 1