0

私はdjango-socialregistrationアプリを使用して、人々がFB経由で私のサイトにログインできるようにしています。

http://django-socialregistration.readthedocs.org/en/latest/index.html

Twitterの場合は正常に機能しますが、Facebookの場合、ユーザーがfbにログインした後もこのエラーが返され続けます。

Credentials could not be validated, the provider returned no access token.

これは、(アプリに付属している)関数で返されるアプリで設定されたエラーです。

def get_access_token(self, code=None, **params):
    """
    Return the memoized access token or go out and fetch one.
    """
    if self._access_token is None:
        if code is None:
            raise ValueError(_('Invalid code.'))

        self.access_token_dict = self._get_access_token(code, **params)
        try:
            self._access_token = self.access_token_dict['access_token']
        except KeyError, e:
            raise OAuthError("Credentials could not be validated, the provider returned no access token.")

したがって、アクセストークンが見つからないか取得できないと思います。

ただし、Facebookデバッガツールは、URLを入力するとこれを返しますが、

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-   html40/loose.dtd">
<html>
<head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head>
<body><p>Session expired.</p></body>
</html>

そしてこれはURLです:

www.site.com/social/facebook/callback/?code=AQCb0lWCOTKFYaCQ43imfKvsMgo-8wyA8aq1WxZDWuCel2868I6gou2rn4bN2kTyuL14FxR9cCvrilJB2R5-JOnQqCvo7ihQAi9outrUB81MQdU-XA-5ur7MT5Wlhz3wkb5bc0fwzUYYFpSyeHNjFrIOY6QdZNdrXLcivv1-3qMNOKijLHf0jmZc7bBqPBTkw-Q#_=_

そして、FBデバッガーが言うように応答コードは200です。

誰もが何が起こっているのか知っていますか?

4

3 に答える 3

1

ここで解決策を確認してください: https://github.com/flashingpumpkin/django-socialregistration/issues/160

于 2012-06-27T13:25:22.847 に答える
0

これはおそらくあなたの質問に対する解決策ではありませんが、何が悪いのかについてもう少し情報が得られます。

上記のコードを変更して、access_token_dictをstdoutにダンプします。

    def get_access_token(self, code=None, **params):
        """
        Return the memoized access token or go out and fetch one.
        """
        if self._access_token is None:
            if code is None:
                raise ValueError(_('Invalid code.'))

            self.access_token_dict = self._get_access_token(code, **params)
            try:
                self._access_token = self.access_token_dict['access_token']
            except KeyError, e:
                print self.access_token_dict
                raise OAuthError("Credentials could not be validated, the provider returned no access token.")

最も一般的なエラーsocialregistrationは、初期化URLとコールバックURLの不一致が原因で発生します。たとえば、Djangoがセッションにアクセスできない場所から開始しhttp://localhost:8000てリダイレクトします。http://127.0.0.1:8000/*/callback/localhost

于 2012-06-21T09:27:46.067 に答える