【问题标题】:Django: DoesNotExist: SocialApp matching query does not existDjango:DoesNotExist:SocialApp 匹配查询不存在
【发布时间】: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 中进行的相关覆盖和添加,以启用 GoogleTwitter 社交身份验证,这两者都会导致同样的错误:

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

我在这里展示了两个提供者示例 - TwitterGoogle - 展示我正在做的模式,并展示该问题不是特定于提供商的;不过,让我们试着只关注 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.comwww.example.com(但使用了我的域)。那应该是什么(在右侧)?这是一个很好的问题,因为我真的不知道那到底是为了什么。仍然没有。这是一种保护机制吗?
  • Django 有多个站点框架。因此,当在 SocialApp 中添加提供程序时,您应该说明可以在哪个站点上使用该提供程序(可以是多个),您应该选择您/biostar 在设置文件中定义了SITE_ID 的站点。除了您没有选择正确的站点之外,我没有想到任何其他失败的原因。

标签: python django twitter django-socialauth


【解决方案1】:

我一次又一次地遇到同样的错误并用这个解决..

我们收到此错误的原因 SITE_ID = 1 当出现“SocialApp匹配查询不存在”时,

此 ID 需要更换。

SITE_ID = 1

希望其他面临此问题的人能得到帮助。

【讨论】:

  • 换成什么?
  • 替换为正确的id,在你的模型中检查。
【解决方案2】:

以下步骤将解决此问题:

  1. 转到名为 django_site 的数据库表。
  2. 查看在社交应用程序中提及为选定站点的站点的 ID 号。
  3. 现在在Django项目的setting.py中配置SITE_ID为id号。

【讨论】:

    【解决方案3】:

    我遇到了类似的问题,正如人们所说,您需要知道 SITE_ID!

    您必须确保在 Django 管理仪表板上,您已在 SOCIAL ACCOUNTS 下添加了您的社交应用程序。

    当您创建社交应用程序时,请确保已为“选择的网站”列出了正确的网站。如果您在本地开发,请将您的计算机 IP 粘贴到那里。将有一个新的 SITE_ID 与您添加到应用程序的每个“选择的站点”相关联。确保您使用的是与您的 IP 相关联的正确的。就我个人而言,在添加了我的 IP 之后,我只是播放并增加了我的 SITE_ID 变量,直到它起作用为止。

    发布此内容以防将来遇到类似情况的人登陆此页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-26
      • 2012-05-10
      • 2013-03-02
      • 2021-12-10
      • 2021-05-07
      • 2017-01-12
      • 2014-04-12
      • 1970-01-01
      相关资源
      最近更新 更多