私は現在、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」を保持するプロパティ バックエンドを持っていることです。
長い投稿で私と一緒にいてくれてありがとう。誰かが何が間違っているのか考えてくれることを願っています:)。回答をお待ちしております。