Django allauth与StackExchange:如何设置?

Django allauth与StackExchange:如何设置?,django,oauth,django-allauth,stackexchange-api,Django,Oauth,Django Allauth,Stackexchange Api,在通过Django allauth成功实现Reddit登录后,我将尝试对StackExchange进行同样的操作 为此,我一直遵循规则 1)在我的Django项目中: 我的设置: ... SOCIALACCOUNT_PROVIDERS = \ { 'stackexchange': { 'SITE': 'stackoverflow' } } LOGIN_REDIRECT_URL = 'main_page' 我在我的一个模板中使用了链接: href=“{%provider

在通过Django allauth成功实现Reddit登录后,我将尝试对StackExchange进行同样的操作

为此,我一直遵循规则

1)在我的Django项目中:

我的设置:

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

LOGIN_REDIRECT_URL = 'main_page'
我在我的一个模板中使用了链接:

href=“{%provider\u login\u url'stackexchange%}”

2)输入:

我已注册到stackapps,如下所示:

  • 应用程序名称:MyApp说明:MyApp OAuth
  • 域:本地主机
  • 应用网站:localhost
  • 我已取消选中“启用客户端” OAuth流”和“禁用桌面应用程序OAuth重定向Uri”
3)然后我输入:

  • 提供者:堆栈交换
  • 名称: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]>
extra_data=resp.json()['items'][0]
...
▼ 局部变量
可变值
响应

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

发生的情况是,
django allauth
使用StackExchange provider让您登录,并使用StackExchange返回的访问令牌,从
/me
url获取数据(以下是示例)。要获取数据,它需要访问令牌、应用程序密钥和从中获取数据的站点。如果没有密钥,StackExchange API将返回

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

如您所见,此词典中没有键

由于您没有在StackExchange应用程序中指定
参数,因此出现此错误。转到
http://localhost:8000/admin
并编辑StackExchange应用程序以包含应用程序密钥。应用程序密钥可在StackApps.com网站上找到,与您获取客户id和密码的页面相同

发生的情况是,
django allauth
使用StackExchange provider让您登录,并使用StackExchange返回的访问令牌,从
/me
url获取数据(以下是示例)。要获取数据,它需要访问令牌、应用程序密钥和从中获取数据的站点。如果没有密钥,StackExchange API将返回

{
    error_id: 405,
    error_message: "`key` is required when `access_token` is passed.",
    error_name: "key_required"
}
如您所见,此词典中没有键