【问题标题】:Django-allauth with StackExchange: How to set it?带有 StackExchange 的 Django-allauth:如何设置?
【发布时间】:2016-04-06 02:29:34
【问题描述】:

通过 Django-allauth 成功实现 Reddit 登录后,我正在尝试对 StackExchange 做同样的事情。

我为此关注了doc

1) 在我的 Django 项目中:

我的设置:

...
SOCIALACCOUNT_PROVIDERS = \
    { 'stackexchange':
        { 'SITE': 'stackoverflow' } }

LOGIN_REDIRECT_URL = 'main_page'

我在我的一个模板中使用了链接:

href="{% provider_login_url 'stackexchange' %}"

2) 在https://stackapps.com/apps/oauth:

我已经像这样注册到 stackapps:

  • 应用程序名称:MyApp 描述:MyApp OAuth
  • 域:本地主机
  • 申请网址:localhost
  • 我取消选中:“启用客户端 OAuth 流程”和“禁用桌面应用程序 OAuth 重定向 Uri”。

3) 然后我输入http://localhost:8000/admin:

  • 提供者:堆栈交换
  • 名称:MyApp
  • 客户端id:(stackapps给出的id)
  • 秘钥:(stackapps给出的秘钥)
  • 选择的网站:example.com

不过,我遇到了这个错误:

KeyError at /accounts/stackexchange/login/callback/

'items'

显然,/accounts/stackexchange/login/callback/ 不存在,因为如果我从错误中查看本地变量:

            extra_data = resp.json()['items'][0]

     ...

▼ Local vars
Variable    Value
resp       <Response [400]>

【问题讨论】:

    标签: django oauth django-allauth stackexchange-api


    【解决方案1】:

    您收到此错误是因为您没有在 StackExchange 应用程序中指定 key 参数。转到 http://localhost:8000/admin 并编辑 StackExchange 应用程序以包含应用程序密钥。可以在 StackApps.com 网站上找到应用密钥,在您获取客户端 ID 和密码的同一页面上。

    发生的情况是django-allauth 使用 StackExchange 提供程序让您登录,并使用 StackExchange 返回的访问令牌从/me url 获取数据(这里是code)。要获取数据,它需要访问令牌、应用程序密钥和从中获取数据的站点。没有密钥,StackExchange API 返回

    {
        error_id: 405,
        error_message: "`key` is required when `access_token` is passed.",
        error_name: "key_required"
    }
    

    如您所见,此字典中没有键 items

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2020-10-25
      • 2014-05-06
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多