在通过Django allauth成功实现Reddit登录后,我正在尝试使用StackExchange进行同样的操作。
我已经跟随医生了。
1)在我的Django项目中:
我的设置:
...
SOCIALACCOUNT_PROVIDERS =
{ 'stackexchange':
{ 'SITE': 'stackoverflow' } }
LOGIN_REDIRECT_URL = 'main_page'
我在我的一个模板中使用了链接:
href="{% provider_login_url 'stackexchange' %}"
2)Inhttps://stackapps.com/apps/oauth:
我已经注册了这样的堆叠:
- 应用程序名称:MyApp描述:MyApp OAuth
- 域:localhost
- 应用程序网站:localhost
- 我已取消选中:"启用客户端OAuth流"one_answers"禁用桌面应用程序OAuth重定向Uri"
3)然后我把http://localhost:8000/admin:
- 提供程序:堆栈交换
- 名称:MyApp
- 客户端id:(堆栈提供的id)
- 密钥:(堆栈提供的密钥)
- 选择的网站:example.com
尽管如此,我还是遇到了这个错误:
KeyError at /accounts/stackexchange/login/callback/
'items'
显然,/accounts/stackeexchange/login/recallback/不存在,因为如果我从错误中查找本地变量:
extra_data = resp.json()['items'][0]
...
▼ Local vars
Variable Value
resp <Response [400]>
您收到此错误是因为您没有在StackExchange应用程序中指定key
参数。转到http://localhost:8000/admin
并编辑StackExchange应用程序以包含应用程序密钥。应用程序密钥可以在StackApps.com网站上找到,也就是你获取客户端id和机密的页面。
发生的情况是,django-allauth
使用StackExchange提供程序让您登录,并使用由StackExchange返回的访问令牌从/me
url获取数据(这是代码)。要获取数据,它需要访问令牌、应用程序密钥和获取数据的站点。没有密钥,StackExchange API返回
{
error_id: 405,
error_message: "`key` is required when `access_token` is passed.",
error_name: "key_required"
}
如您所见,这本字典中没有关键字items
。