Django:SocialApp 匹配查询不存在

Posted

技术标签:

【中文标题】Django:SocialApp 匹配查询不存在【英文标题】:Django: SocialApp matching query does not exist 【发布时间】:2013-03-02 19:22:54 【问题描述】:

我正在使用 django-allauth,并使用以下详细信息配置了 localhost:9000/admin/

socialapp .
provider:
Name:
Client id:
App ID, or consumer key
Key:
Secret:  etc .

我设置了SITE_ID = 2(因为我把默认站点example.com改成了localhost:9000

在settings.py中:

   INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'django.contrib.admin',
        'uni_form',
        'allauth',
        'allauth.account',
        'allauth.socialaccount',
        'bootstrapform',
        # 'allauth.socialaccount.providers.twitter',
        # 'allauth.socialaccount.providers.openid',
         'allauth.socialaccount.providers.facebook',
    )
    SOCIALACCOUNT_PROVIDERS = \
         'facebook':
             'SCOPE': ['email', 'publish_stream'],
              'AUTH_PARAMS':  'auth_type': 'reauthenticate' ,
              'METHOD': 'oauth2' ,
              'LOCALE_FUNC': 'path.to.callable' 

当我去:

http://localhost:9000/accounts/facebook/login

我明白了:

Error :  `SocialApp matching query does not exist.

我做错了什么?

【问题讨论】:

【参考方案1】:

作为将其放入管理员的替代方法,您还可以将其放入您的设置中,如下所示:(至少在 2022 年,版本为 django-allauth==0.45.0

SOCIALACCOUNT_PROVIDERS = 
    'discord': 
        # From https://developer.twitter.com
        'APP': 
            'client_id': os.environ['TWITTER_API_KEY'],
            'secret': os.environ['TWITTER_API_SECRET'],
            'key': os.environ['TWITTER_APP_ID'],
        
    ,
    'twitter': 
        # From https://developer.twitter.com
        'APP': 
            'client_id': os.environ['TWITTER_API_KEY'],
            'secret': os.environ['TWITTER_API_SECRET'],
            'key': os.environ['TWITTER_APP_ID'],
        
    ,

【讨论】:

【参考方案2】:

第 1 步:转到您的管理页面。 查找social application

第 2 步:现在添加如下图所示的行。 提供您的客户端 ID 和 google api 提供的密钥并将 available site (example.com) 移动到 chosen sites

第 3 步:现在进入管理页面侧边导航中的sites 并像下图那样自定义并保存

第 4 步:现在,在 settings.py 文件中添加 SITE_ID = 1

【讨论】:

【参考方案3】:

就我而言,在添加社交应用程序页面上,我忘记将我的网站选为"Chosen sites"??‍♂️

见下面的截图(右下角是选择的站点列表)

【讨论】:

【参考方案4】:

对我来说,当我在settings.py 中出现此错误时:

SITE_ID = 1

当我把它改成2时它起作用了:

SITE_ID = 2

【讨论】:

【参考方案5】:

使用 Django 管理员,您需要创建一个 SocialApp 列出您的 Facebook 应用程序凭据。确保此应用程序附加到正确的站点(如django.contrib.sites.models.Site)。

在您的情况下,需要有一个 id=2 的 django.contrib.sites.models.Site 实例(检查站点管理员),该实例被列为 SocialApp 的站点。

如果SocialApp 丢失,或者如果它已创建但未附加到与您的settings.SITE_ID 匹配的站点,则allauth 不知道要选择哪个应用程序,从而导致您在上面列出的错误消息。

【讨论】:

感谢作者我错过了 django.contrib.sites.models.Site 行 我无法让管理面板显示我的站点 ID,因此我将其加载到 shell 中:from django.contrib.sites.models import Site 并执行 Site.objects.all() 以查看列表。 Site.objects.get(id=2) 实际上设置为 example,所以我不得不将我的设置更改为 3,这是我的 localhost 设置的值。 我在测试中遇到了这个错误。这给了我解决问题的线索。在您的设置中,您必须添加 from allauth.utils import get_current_site from allauth.socialaccount.models import SocialApp sa = SocialApp.objects.create(name='Facebook', provider='facebook') sa.sites.add(get_current_site( )) 我这样做:user$ python manage.py shell。然后在交互式提示中,我发出以下两个命令:>>> from django.contrib.sites.models import Site,然后是>>> sorted([(site.id,site.name) for site in Site.objects.all()])。输出如下:[(1, u'www.lvh.me'), (2, u'example.com'), (3, u'www.example.com'), (4, u'example.com:80'), (5, u'www.example.com:80')]

以上是关于Django:SocialApp 匹配查询不存在的主要内容,如果未能解决你的问题,请参考以下文章

匹配查询不存在 django V3.2.9

ContentType 匹配查询不存在。 django=3.0.7

对 Django 用户匹配查询不存在消息感到沮丧

Django 2.1 令牌匹配查询不存在

django admin - 匹配的查询不存在

Django REST EmailAddress 匹配查询不存在