【发布时间】:2018-03-11 06:47:06
【问题描述】:
我正在尝试在我的 Django Web 应用程序中激活社交登录,该应用程序来自此 GitHub repository 中的开源软件(所以我没有写它);我遇到了这个众所周知的问题:
DoesNotExist: SocialApp matching query does not exist.
基础settings 文件位于here。我根本不修改那个文件。相反,我在 deploy.py settings 文件的顶部 import(继承)它,并在那里进行覆盖和自定义。
与此问题特别相关,这里是我在deploy.py 中进行的相关覆盖和添加,以启用 Google 和 Twitter 社交身份验证,这两者都会导致同样的错误:
INSTALLED_APPS.remove('allauth.socialaccount.providers.persona') # Remove
INSTALLED_APPS.append('allauth.socialaccount.providers.google') # Add
INSTALLED_APPS.append('allauth.socialaccount.providers.twitter') # Add
_GOOGLE = {
'SCOPE': ['email', 'https://www.googleapis.com/auth/userinfo.profile'],
'AUTH_PARAMS': {'access_type': 'online'},
'PROVIDER_KEY': get_env("GOOGLE_PROVIDER_KEY"), # Stored in secrets.env
'PROVIDER_SECRET_KEY': get_env("GOOGLE_PROVIDER_SECRET_KEY"), # Stored in secrets.env
}
SOCIALACCOUNT_PROVIDERS['google'] = _GOOGLE # This isn't enabled in biostar.settings.base
_TWITTER = {
'SCOPE': ['email'],
'AUTH_PARAMS': {'access_type': 'online'},
'PROVIDER_KEY': get_env("TWITTER_PROVIDER_KEY"), # Stored in secrets.env
'PROVIDER_SECRET_KEY': get_env("TWITTER_PROVIDER_SECRET_KEY"), # Stored in secrets.env
}
SOCIALACCOUNT_PROVIDERS['twitter'] = _TWITTER
我在这里展示了两个提供者示例 - Twitter 和 Google - 展示我正在做的模式,并展示该问题不是特定于提供商的;不过,让我们试着只关注 Twitter 以保持简单。
现在根据this document——来自上述项目的close fork——除了我上面实现的(以编程方式)之外,还需要设置相同的社交账户和密钥/在 Django 管理面板 的 Social Apps 部分中为他们提供密钥。 (请注意,该分叉是由或多或少同一个团队开发的;因此,此要求也可能适用于原始的上游实现)。该文件的相关部分说明如下:
恢复后,您需要重新输入社交登录信息。 不幸的是,即使这些信息需要在配置中 初始化biostar的环境,也需要它 (冗余)也在数据库中。所以去 Django 管理面板 并单击社交应用程序,然后浏览每个应用程序并填写 适当的值。
所以我也这样做了。
无论我尝试什么(不同的提供程序、不同的键、django 面板添加、没有 django 面板添加等),我都会得到上述异常,就好像我错过了一个步骤一样。
顺便说一句,我尝试了 Twitter 的两个密钥对(因为我总是忘记使用哪对;所以尝试了 Consumer Key (API Key) + Consumer Secret (API Secret) 和 @987654339 @ + Access Token Secret,虽然我在网上看到的确实是前者)。为了完整起见,仅提及这一点。
我错过了什么?有什么想法吗?
提前感谢您! :)
EDIT-1:这里是异常的完整粘贴:https://pastebin.com/0UBAfAtu
【问题讨论】:
-
您好,能否请您提供完整的回溯,而不仅仅是
DoesNotExist: SocialApp matching query does not exist.?您采取的步骤已经足够好,但完整的回溯将有助于调试您遇到的问题。 -
您好 @AamirAdnan 我用包含您请求的信息的 pastebin URL 编辑了问题。有两个背靠背的例子。 (我对其进行了正则表达式以使用 example.com)。你是对的:我本来应该把它包括在内。 (._.)
-
当您通过 SocialApp 的管理面板添加提供商的凭据后,您是否还选择了下面的站点(多对多 rel)来分配它? imgur.com/a/lB5IY
-
我做到了。我使用了
example.com和www.example.com(但使用了我的域)。那应该是什么(在右侧)?这是一个很好的问题,因为我真的不知道那到底是为了什么。仍然没有。这是一种保护机制吗? -
Django 有多个站点框架。因此,当在 SocialApp 中添加提供程序时,您应该说明可以在哪个站点上使用该提供程序(可以是多个),您应该选择您/biostar 在设置文件中定义了
SITE_ID的站点。除了您没有选择正确的站点之外,我没有想到任何其他失败的原因。
标签: python django twitter django-socialauth