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.")

所以我猜找不到或检索到访问令牌。

当我输入 url 时,Facebook 调试器工具会返回这个,

<!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>

这是网址:

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到标准输出:

    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 不匹配而发生的最常见错误- 例如,您从Django 无法访问您的会话的位置开始http://localhost:8000并重定向回。http://127.0.0.1:8000/*/callback/localhost

于 2012-06-21T09:27:46.067 回答
0

您必须转到您的应用程序高级设置(转到http://developers.facebook.com并导航到您的应用程序 -> 设置 -> 高级)并将您的服务器 IP 添加到白名单中。

我在这里解决了这个问题。

于 2015-12-18T19:53:28.487 回答